From d1867b9c1a23a305fdf94c2d53019d83a09d2036 Mon Sep 17 00:00:00 2001 From: Guinevere Saenger Date: Wed, 22 Jan 2025 12:28:14 -0800 Subject: [PATCH] Upgrade terraform-provider-google-beta to v6.17.0 (#2894) This PR was generated via `$ upgrade-provider pulumi/pulumi-gcp`. --- - Upgrading terraform-provider-google-beta from 6.16.0 to 6.17.0. Fixes #2888 --- ...001-Allow-disabling-the-partner-name.patch | 4 +- ...for-sql-database-instance-flattening.patch | 14 +- patches/0005-docs-patching.patch | 10 +- ...07-Remove-duplicative-resource-token.patch | 4 +- ...8-Fix-794-with-an-unconditional-read.patch | 4 +- ...rovisioning-label-to-goog-pulumi-pro.patch | 4 +- .../pulumi-resource-gcp/bridge-metadata.json | 180 ++ provider/cmd/pulumi-resource-gcp/schema.json | 2430 ++++++++++++++++- provider/resources.go | 2 + .../AccessLevelCondition.cs | 12 + .../AccessContextManager/EgressPolicy.cs | 12 + .../AccessContextManager/IngressPolicy.cs | 12 + .../ServicePerimeterDryRunEgressPolicy.cs | 12 + .../ServicePerimeterDryRunIngressPolicy.cs | 12 + .../ServicePerimeterDryRunResource.cs | 12 + .../ServicePerimeterEgressPolicy.cs | 12 + .../ServicePerimeterIngressPolicy.cs | 12 + .../ServicePerimeterResource.cs | 24 + sdk/dotnet/Apigee/EnvironmentAddonsConfig.cs | 145 + sdk/dotnet/ArtifactRegistry/Repository.cs | 21 +- sdk/dotnet/BigQuery/Connection.cs | 2 +- sdk/dotnet/BigQuery/Routine.cs | 2 +- sdk/dotnet/Billing/ProjectInfo.cs | 4 +- sdk/dotnet/Chronicle/DataAccessLabel.cs | 18 +- .../Inputs/ReferenceListEntryArgs.cs | 28 + .../Inputs/ReferenceListEntryGetArgs.cs | 28 + .../Inputs/ReferenceListScopeInfoArgs.cs | 27 + .../Inputs/ReferenceListScopeInfoGetArgs.cs | 27 + ...enceListScopeInfoReferenceListScopeArgs.cs | 34 + ...eListScopeInfoReferenceListScopeGetArgs.cs | 34 + .../Inputs/RuleCompilationDiagnosticArgs.cs | 53 + .../RuleCompilationDiagnosticGetArgs.cs | 53 + .../RuleCompilationDiagnosticPositionArgs.cs | 48 + ...uleCompilationDiagnosticPositionGetArgs.cs | 48 + .../Chronicle/Inputs/RuleSeverityArgs.cs | 27 + .../Chronicle/Inputs/RuleSeverityGetArgs.cs | 27 + .../Chronicle/Outputs/ReferenceListEntry.cs | 29 + .../Outputs/ReferenceListScopeInfo.cs | 28 + ...eferenceListScopeInfoReferenceListScope.cs | 29 + .../Outputs/RuleCompilationDiagnostic.cs | 58 + .../RuleCompilationDiagnosticPosition.cs | 53 + sdk/dotnet/Chronicle/Outputs/RuleSeverity.cs | 28 + sdk/dotnet/Chronicle/ReferenceList.cs | 392 +++ sdk/dotnet/Chronicle/Rule.cs | 663 +++++ sdk/dotnet/Chronicle/RuleDeployment.cs | 398 +++ ...ntimeTemplateDataPersistentDiskSpecArgs.cs | 32 + ...meTemplateDataPersistentDiskSpecGetArgs.cs | 32 + .../RuntimeTemplateEncryptionSpecArgs.cs | 26 + .../RuntimeTemplateEncryptionSpecGetArgs.cs | 26 + .../Inputs/RuntimeTemplateEucConfigArgs.cs | 26 + .../Inputs/RuntimeTemplateEucConfigGetArgs.cs | 26 + .../RuntimeTemplateIdleShutdownConfigArgs.cs | 26 + ...untimeTemplateIdleShutdownConfigGetArgs.cs | 26 + .../Inputs/RuntimeTemplateMachineSpecArgs.cs | 38 + .../RuntimeTemplateMachineSpecGetArgs.cs | 38 + .../Inputs/RuntimeTemplateNetworkSpecArgs.cs | 38 + .../RuntimeTemplateNetworkSpecGetArgs.cs | 38 + .../RuntimeTemplateShieldedVmConfigArgs.cs | 26 + .../RuntimeTemplateShieldedVmConfigGetArgs.cs | 26 + .../RuntimeTemplateDataPersistentDiskSpec.cs | 35 + .../Outputs/RuntimeTemplateEncryptionSpec.cs | 27 + .../Colab/Outputs/RuntimeTemplateEucConfig.cs | 27 + .../RuntimeTemplateIdleShutdownConfig.cs | 27 + .../Outputs/RuntimeTemplateMachineSpec.cs | 42 + .../Outputs/RuntimeTemplateNetworkSpec.cs | 42 + .../RuntimeTemplateShieldedVmConfig.cs | 27 + sdk/dotnet/Colab/README.md | 1 + sdk/dotnet/Colab/RuntimeTemplate.cs | 607 ++++ .../Inputs/InstanceNetworkInterfaceArgs.cs | 2 +- .../Inputs/InstanceNetworkInterfaceGetArgs.cs | 2 +- .../InstanceTemplateNetworkInterfaceArgs.cs | 2 +- ...InstanceTemplateNetworkInterfaceGetArgs.cs | 2 +- ...ionInstanceTemplateNetworkInterfaceArgs.cs | 2 +- ...InstanceTemplateNetworkInterfaceGetArgs.cs | 2 +- sdk/dotnet/Compute/InterconnectAttachment.cs | 6 +- .../Outputs/InstanceNetworkInterface.cs | 2 +- .../InstanceTemplateNetworkInterface.cs | 2 +- .../RegionInstanceTemplateNetworkInterface.cs | 2 +- sdk/dotnet/Compute/Route.cs | 12 +- sdk/dotnet/Compute/Subnetwork.cs | 6 +- sdk/dotnet/Compute/TargetInstance.cs | 4 +- sdk/dotnet/Compute/URLMap.cs | 2 + sdk/dotnet/Config/Config.cs | 21 + sdk/dotnet/DataPlex/EntryType.cs | 2 +- sdk/dotnet/DataPlex/Task.cs | 16 +- .../ConnectionProfile.cs | 6 +- sdk/dotnet/Dataproc/Batch.cs | 10 +- sdk/dotnet/DiscoveryEngine/DataStore.cs | 53 + .../DataStoreAdvancedSiteSearchConfigArgs.cs | 32 + ...ataStoreAdvancedSiteSearchConfigGetArgs.cs | 32 + .../DataStoreAdvancedSiteSearchConfig.cs | 35 + .../EdgeNetwork/InterconnectAttachment.cs | 472 ++++ sdk/dotnet/Firestore/Field.cs | 4 +- sdk/dotnet/Gemini/CodeRepositoryIndex.cs | 18 + sdk/dotnet/GkeHub/MembershipBinding.cs | 6 +- .../GkeHub/MembershipRbacRoleBinding.cs | 4 +- sdk/dotnet/GkeHub/Namespace.cs | 4 +- sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs | 4 +- sdk/dotnet/Iap/TunnelDestGroup.cs | 2 +- .../IntegrationConnectors/ManagedZone.cs | 8 +- sdk/dotnet/NetworkConnectivity/Spoke.cs | 14 +- sdk/dotnet/NetworkSecurity/AuthzPolicy.cs | 160 -- sdk/dotnet/OrgPolicy/Policy.cs | 2 +- .../ParameterManager/GetRegionalParameter.cs | 197 ++ .../Inputs/ParameterPolicyMemberArgs.cs | 40 + .../Inputs/ParameterPolicyMemberGetArgs.cs | 40 + .../RegionalParameterPolicyMemberArgs.cs | 39 + .../RegionalParameterPolicyMemberGetArgs.cs | 39 + .../GetRegionalParameterPolicyMemberResult.cs | 40 + .../Outputs/ParameterPolicyMember.cs | 43 + .../Outputs/RegionalParameterPolicyMember.cs | 42 + sdk/dotnet/ParameterManager/Parameter.cs | 403 +++ sdk/dotnet/ParameterManager/README.md | 1 + .../ParameterManager/RegionalParameter.cs | 424 +++ .../RegionalParameterVersion.cs | 333 +++ sdk/dotnet/Provider.cs | 18 + sdk/dotnet/PubSub/Subscription.cs | 6 +- sdk/dotnet/Sql/DatabaseInstance.cs | 41 +- sdk/dotnet/Sql/GetDatabaseInstance.cs | 4 + .../DatabaseInstanceReplicationClusterArgs.cs | 32 + ...tabaseInstanceReplicationClusterGetArgs.cs | 32 + .../DatabaseInstanceReplicationCluster.cs | 35 + ...atabaseInstanceReplicationClusterResult.cs | 35 + ...stancesInstanceReplicationClusterResult.cs | 35 + .../GetDatabaseInstancesInstanceResult.cs | 7 + .../Sql/SourceRepresentationInstance.cs | 9 +- sdk/dotnet/Vertex/AiEndpoint.cs | 4 +- .../Vertex/AiFeatureOnlineStoreFeatureview.cs | 4 +- .../accessLevelCondition.go | 11 + .../gcp/accesscontextmanager/egressPolicy.go | 11 + .../gcp/accesscontextmanager/ingressPolicy.go | 11 + .../servicePerimeterDryRunEgressPolicy.go | 11 + .../servicePerimeterDryRunIngressPolicy.go | 11 + .../servicePerimeterDryRunResource.go | 11 + .../servicePerimeterEgressPolicy.go | 11 + .../servicePerimeterIngressPolicy.go | 11 + .../servicePerimeterResource.go | 22 + sdk/go/gcp/apigee/environmentAddonsConfig.go | 272 ++ sdk/go/gcp/apigee/init.go | 7 + sdk/go/gcp/artifactregistry/repository.go | 17 +- sdk/go/gcp/bigquery/connection.go | 2 +- sdk/go/gcp/bigquery/routine.go | 2 +- sdk/go/gcp/billing/projectInfo.go | 4 +- sdk/go/gcp/chronicle/dataAccessLabel.go | 36 +- sdk/go/gcp/chronicle/init.go | 21 + sdk/go/gcp/chronicle/pulumiTypes.go | 744 +++++ sdk/go/gcp/chronicle/referenceList.go | 541 ++++ sdk/go/gcp/chronicle/rule.go | 855 ++++++ sdk/go/gcp/chronicle/ruleDeployment.go | 552 ++++ sdk/go/gcp/colab/init.go | 44 + sdk/go/gcp/colab/pulumiTypes.go | 1099 ++++++++ sdk/go/gcp/colab/runtimeTemplate.go | 699 +++++ sdk/go/gcp/compute/interconnectAttachment.go | 12 +- sdk/go/gcp/compute/pulumiTypes.go | 18 +- sdk/go/gcp/compute/route.go | 24 +- sdk/go/gcp/compute/subnetwork.go | 12 +- sdk/go/gcp/compute/targetInstance.go | 4 +- sdk/go/gcp/compute/urlmap.go | 2 + sdk/go/gcp/config/config.go | 9 + .../connectionProfile.go | 6 +- sdk/go/gcp/dataplex/entryType.go | 2 +- sdk/go/gcp/dataplex/task.go | 16 +- sdk/go/gcp/dataproc/batch.go | 10 +- sdk/go/gcp/discoveryengine/dataStore.go | 59 + sdk/go/gcp/discoveryengine/pulumiTypes.go | 160 ++ sdk/go/gcp/edgenetwork/init.go | 7 + .../gcp/edgenetwork/interconnectAttachment.go | 585 ++++ sdk/go/gcp/firestore/field.go | 4 +- sdk/go/gcp/gemini/codeRepositoryIndex.go | 15 + sdk/go/gcp/gkehub/membershipBinding.go | 6 +- .../gcp/gkehub/membershipRbacRoleBinding.go | 4 +- sdk/go/gcp/gkehub/namespace.go | 4 +- sdk/go/gcp/gkehub/scopeRbacRoleBinding.go | 4 +- sdk/go/gcp/iap/tunnelDestGroup.go | 2 +- .../gcp/integrationconnectors/managedZone.go | 8 +- sdk/go/gcp/networkconnectivity/spoke.go | 14 +- sdk/go/gcp/networksecurity/authzPolicy.go | 170 -- sdk/go/gcp/orgpolicy/policy.go | 2 +- .../parametermanager/getRegionalParameter.go | 166 ++ sdk/go/gcp/parametermanager/init.go | 58 + sdk/go/gcp/parametermanager/parameter.go | 545 ++++ sdk/go/gcp/parametermanager/pulumiTypes.go | 407 +++ .../gcp/parametermanager/regionalParameter.go | 566 ++++ .../regionalParameterVersion.go | 474 ++++ sdk/go/gcp/provider.go | 21 + sdk/go/gcp/pubsub/subscription.go | 6 +- sdk/go/gcp/sql/databaseInstance.go | 40 +- sdk/go/gcp/sql/getDatabaseInstance.go | 7 + sdk/go/gcp/sql/pulumiTypes.go | 395 ++- .../gcp/sql/sourceRepresentationInstance.go | 18 +- sdk/go/gcp/vertex/aiEndpoint.go | 4 +- .../vertex/aiFeatureOnlineStoreFeatureview.go | 4 +- .../src/main/java/com/pulumi/gcp/Config.java | 9 + .../main/java/com/pulumi/gcp/Provider.java | 18 + .../java/com/pulumi/gcp/ProviderArgs.java | 51 + .../AccessLevelCondition.java | 14 + .../accesscontextmanager/EgressPolicy.java | 14 + .../accesscontextmanager/IngressPolicy.java | 14 + .../ServicePerimeterDryRunEgressPolicy.java | 14 + .../ServicePerimeterDryRunIngressPolicy.java | 14 + .../ServicePerimeterDryRunResource.java | 14 + .../ServicePerimeterEgressPolicy.java | 14 + .../ServicePerimeterIngressPolicy.java | 14 + .../ServicePerimeterResource.java | 28 + .../inputs/AccessLevelConditionState.java | 37 + .../inputs/EgressPolicyState.java | 37 + .../inputs/IngressPolicyState.java | 37 + ...rvicePerimeterDryRunEgressPolicyState.java | 37 + ...vicePerimeterDryRunIngressPolicyState.java | 37 + .../ServicePerimeterDryRunResourceState.java | 37 + .../ServicePerimeterEgressPolicyState.java | 37 + .../ServicePerimeterIngressPolicyState.java | 37 + .../inputs/ServicePerimeterResourceState.java | 74 + .../gcp/apigee/EnvironmentAddonsConfig.java | 134 + .../apigee/EnvironmentAddonsConfigArgs.java | 137 + .../inputs/EnvironmentAddonsConfigState.java | 133 + .../gcp/artifactregistry/Repository.java | 17 +- .../com/pulumi/gcp/bigquery/Connection.java | 2 +- .../java/com/pulumi/gcp/bigquery/Routine.java | 2 +- .../com/pulumi/gcp/billing/ProjectInfo.java | 4 +- .../pulumi/gcp/chronicle/DataAccessLabel.java | 12 +- .../gcp/chronicle/DataAccessLabelArgs.java | 24 +- .../pulumi/gcp/chronicle/ReferenceList.java | 359 +++ .../gcp/chronicle/ReferenceListArgs.java | 373 +++ .../java/com/pulumi/gcp/chronicle/Rule.java | 661 +++++ .../com/pulumi/gcp/chronicle/RuleArgs.java | 429 +++ .../pulumi/gcp/chronicle/RuleDeployment.java | 355 +++ .../gcp/chronicle/RuleDeploymentArgs.java | 401 +++ .../inputs/DataAccessLabelState.java | 24 +- .../inputs/ReferenceListEntryArgs.java | 93 + .../inputs/ReferenceListScopeInfoArgs.java | 89 + ...ceListScopeInfoReferenceListScopeArgs.java | 104 + .../chronicle/inputs/ReferenceListState.java | 621 +++++ .../inputs/RuleCompilationDiagnosticArgs.java | 231 ++ ...RuleCompilationDiagnosticPositionArgs.java | 210 ++ .../chronicle/inputs/RuleDeploymentState.java | 700 +++++ .../chronicle/inputs/RuleSeverityArgs.java | 87 + .../gcp/chronicle/inputs/RuleState.java | 1162 ++++++++ .../chronicle/outputs/ReferenceListEntry.java | 62 + .../outputs/ReferenceListScopeInfo.java | 60 + ...erenceListScopeInfoReferenceListScope.java | 64 + .../outputs/RuleCompilationDiagnostic.java | 139 + .../RuleCompilationDiagnosticPosition.java | 128 + .../gcp/chronicle/outputs/RuleSeverity.java | 59 + .../com/pulumi/gcp/colab/RuntimeTemplate.java | 554 ++++ .../pulumi/gcp/colab/RuntimeTemplateArgs.java | 638 +++++ ...imeTemplateDataPersistentDiskSpecArgs.java | 120 + .../RuntimeTemplateEncryptionSpecArgs.java | 83 + .../inputs/RuntimeTemplateEucConfigArgs.java | 83 + ...RuntimeTemplateIdleShutdownConfigArgs.java | 83 + .../RuntimeTemplateMachineSpecArgs.java | 158 ++ .../RuntimeTemplateNetworkSpecArgs.java | 158 ++ .../RuntimeTemplateShieldedVmConfigArgs.java | 83 + .../colab/inputs/RuntimeTemplateState.java | 709 +++++ ...RuntimeTemplateDataPersistentDiskSpec.java | 78 + .../RuntimeTemplateEncryptionSpec.java | 57 + .../outputs/RuntimeTemplateEucConfig.java | 57 + .../RuntimeTemplateIdleShutdownConfig.java | 57 + .../outputs/RuntimeTemplateMachineSpec.java | 100 + .../outputs/RuntimeTemplateNetworkSpec.java | 100 + .../RuntimeTemplateShieldedVmConfig.java | 57 + .../gcp/compute/InterconnectAttachment.java | 4 +- .../compute/InterconnectAttachmentArgs.java | 8 +- .../java/com/pulumi/gcp/compute/Route.java | 12 +- .../com/pulumi/gcp/compute/Subnetwork.java | 4 +- .../pulumi/gcp/compute/SubnetworkArgs.java | 8 +- .../pulumi/gcp/compute/TargetInstance.java | 4 +- .../java/com/pulumi/gcp/compute/URLMap.java | 2 + .../inputs/InstanceNetworkInterfaceArgs.java | 8 +- .../InstanceTemplateNetworkInterfaceArgs.java | 8 +- .../inputs/InterconnectAttachmentState.java | 8 +- ...nInstanceTemplateNetworkInterfaceArgs.java | 8 +- .../pulumi/gcp/compute/inputs/RouteState.java | 24 +- .../gcp/compute/inputs/SubnetworkState.java | 8 +- .../outputs/InstanceNetworkInterface.java | 4 +- .../InstanceTemplateNetworkInterface.java | 4 +- ...egionInstanceTemplateNetworkInterface.java | 4 +- .../ConnectionProfile.java | 6 +- .../com/pulumi/gcp/dataplex/EntryType.java | 2 +- .../java/com/pulumi/gcp/dataplex/Task.java | 16 +- .../java/com/pulumi/gcp/dataproc/Batch.java | 10 +- .../pulumi/gcp/discoveryengine/DataStore.java | 63 + .../gcp/discoveryengine/DataStoreArgs.java | 42 + ...DataStoreAdvancedSiteSearchConfigArgs.java | 120 + .../inputs/DataStoreState.java | 42 + .../DataStoreAdvancedSiteSearchConfig.java | 78 + .../edgenetwork/InterconnectAttachment.java | 419 +++ .../InterconnectAttachmentArgs.java | 465 ++++ .../inputs/InterconnectAttachmentState.java | 655 +++++ .../java/com/pulumi/gcp/firestore/Field.java | 4 +- .../gcp/gemini/CodeRepositoryIndex.java | 15 + .../gcp/gemini/CodeRepositoryIndexArgs.java | 38 + .../inputs/CodeRepositoryIndexState.java | 38 + .../pulumi/gcp/gkehub/MembershipBinding.java | 6 +- .../gcp/gkehub/MembershipRbacRoleBinding.java | 4 +- .../java/com/pulumi/gcp/gkehub/Namespace.java | 4 +- .../gcp/gkehub/ScopeRbacRoleBinding.java | 4 +- .../com/pulumi/gcp/iap/TunnelDestGroup.java | 2 +- .../integrationconnectors/ManagedZone.java | 8 +- .../pulumi/gcp/networkconnectivity/Spoke.java | 14 +- .../gcp/networksecurity/AuthzPolicy.java | 172 -- .../java/com/pulumi/gcp/orgpolicy/Policy.java | 2 +- .../gcp/parametermanager/Parameter.java | 397 +++ .../gcp/parametermanager/ParameterArgs.java | 259 ++ .../ParametermanagerFunctions.java | 223 ++ .../parametermanager/RegionalParameter.java | 414 +++ .../RegionalParameterArgs.java | 299 ++ .../RegionalParameterVersion.java | 352 +++ .../RegionalParameterVersionArgs.java | 217 ++ .../inputs/GetRegionalParameterArgs.java | 164 ++ .../inputs/GetRegionalParameterPlainArgs.java | 133 + .../inputs/ParameterPolicyMemberArgs.java | 152 ++ .../inputs/ParameterState.java | 502 ++++ .../RegionalParameterPolicyMemberArgs.java | 148 + .../inputs/RegionalParameterState.java | 539 ++++ .../inputs/RegionalParameterVersionState.java | 359 +++ .../GetRegionalParameterPolicyMember.java | 91 + .../outputs/GetRegionalParameterResult.java | 229 ++ .../outputs/ParameterPolicyMember.java | 94 + .../RegionalParameterPolicyMember.java | 92 + .../com/pulumi/gcp/pubsub/Subscription.java | 6 +- .../com/pulumi/gcp/sql/DatabaseInstance.java | 37 +- .../pulumi/gcp/sql/DatabaseInstanceArgs.java | 42 + .../gcp/sql/SourceRepresentationInstance.java | 6 +- .../sql/SourceRepresentationInstanceArgs.java | 12 +- ...atabaseInstanceReplicationClusterArgs.java | 121 + .../gcp/sql/inputs/DatabaseInstanceState.java | 42 + .../SourceRepresentationInstanceState.java | 12 +- .../DatabaseInstanceReplicationCluster.java | 79 + ...GetDatabaseInstanceReplicationCluster.java | 82 + .../outputs/GetDatabaseInstanceResult.java | 19 + .../outputs/GetDatabaseInstancesInstance.java | 27 + ...seInstancesInstanceReplicationCluster.java | 82 + .../com/pulumi/gcp/vertex/AiEndpoint.java | 4 +- .../AiFeatureOnlineStoreFeatureview.java | 4 +- .../accessLevelCondition.ts | 10 + .../accesscontextmanager/egressPolicy.ts | 10 + .../accesscontextmanager/ingressPolicy.ts | 10 + .../servicePerimeterDryRunEgressPolicy.ts | 10 + .../servicePerimeterDryRunIngressPolicy.ts | 10 + .../servicePerimeterDryRunResource.ts | 10 + .../servicePerimeterEgressPolicy.ts | 10 + .../servicePerimeterIngressPolicy.ts | 10 + .../servicePerimeterResource.ts | 20 + sdk/nodejs/apigee/environmentAddonsConfig.ts | 133 + sdk/nodejs/apigee/index.ts | 8 + sdk/nodejs/artifactregistry/repository.ts | 17 +- sdk/nodejs/bigquery/connection.ts | 2 +- sdk/nodejs/bigquery/routine.ts | 2 +- sdk/nodejs/billing/projectInfo.ts | 4 +- sdk/nodejs/chronicle/dataAccessLabel.ts | 18 +- sdk/nodejs/chronicle/index.ts | 24 + sdk/nodejs/chronicle/referenceList.ts | 330 +++ sdk/nodejs/chronicle/rule.ts | 536 ++++ sdk/nodejs/chronicle/ruleDeployment.ts | 344 +++ sdk/nodejs/colab/index.ts | 25 + sdk/nodejs/colab/runtimeTemplate.ts | 463 ++++ sdk/nodejs/compute/interconnectAttachment.ts | 6 +- sdk/nodejs/compute/route.ts | 12 +- sdk/nodejs/compute/subnetwork.ts | 6 +- sdk/nodejs/compute/targetInstance.ts | 4 +- sdk/nodejs/compute/urlmap.ts | 2 + sdk/nodejs/config/vars.ts | 24 + .../connectionProfile.ts | 6 +- sdk/nodejs/dataplex/entryType.ts | 2 +- sdk/nodejs/dataplex/task.ts | 16 +- sdk/nodejs/dataproc/batch.ts | 10 +- sdk/nodejs/discoveryengine/dataStore.ts | 38 + sdk/nodejs/edgenetwork/index.ts | 8 + .../edgenetwork/interconnectAttachment.ts | 388 +++ sdk/nodejs/firestore/field.ts | 4 +- sdk/nodejs/gemini/codeRepositoryIndex.ts | 14 + sdk/nodejs/gkehub/membershipBinding.ts | 6 +- .../gkehub/membershipRbacRoleBinding.ts | 4 +- sdk/nodejs/gkehub/namespace.ts | 4 +- sdk/nodejs/gkehub/scopeRbacRoleBinding.ts | 4 +- sdk/nodejs/iap/tunnelDestGroup.ts | 2 +- sdk/nodejs/index.ts | 4 + .../integrationconnectors/managedZone.ts | 8 +- sdk/nodejs/networkconnectivity/spoke.ts | 14 +- sdk/nodejs/networksecurity/authzPolicy.ts | 114 - sdk/nodejs/orgpolicy/policy.ts | 2 +- .../parametermanager/getRegionalParameter.ts | 107 + sdk/nodejs/parametermanager/index.ts | 46 + sdk/nodejs/parametermanager/parameter.ts | 308 +++ .../parametermanager/regionalParameter.ts | 330 +++ .../regionalParameterVersion.ts | 260 ++ sdk/nodejs/provider.ts | 9 + sdk/nodejs/pubsub/subscription.ts | 6 +- sdk/nodejs/sql/databaseInstance.ts | 37 +- sdk/nodejs/sql/getDatabaseInstance.ts | 1 + .../sql/sourceRepresentationInstance.ts | 9 +- sdk/nodejs/tsconfig.json | 12 + sdk/nodejs/types/input.ts | 223 +- sdk/nodejs/types/output.ts | 269 +- sdk/nodejs/vertex/aiEndpoint.ts | 4 +- .../vertex/aiFeatureOnlineStoreFeatureview.ts | 4 +- sdk/python/pulumi_gcp/__init__.py | 78 + .../access_level_condition.py | 28 + .../accesscontextmanager/egress_policy.py | 28 + .../accesscontextmanager/ingress_policy.py | 28 + ...service_perimeter_dry_run_egress_policy.py | 28 + ...ervice_perimeter_dry_run_ingress_policy.py | 28 + .../service_perimeter_dry_run_resource.py | 28 + .../service_perimeter_egress_policy.py | 28 + .../service_perimeter_ingress_policy.py | 28 + .../service_perimeter_resource.py | 56 + sdk/python/pulumi_gcp/apigee/__init__.py | 1 + .../apigee/environment_addons_config.py | 266 ++ .../pulumi_gcp/artifactregistry/repository.py | 34 +- sdk/python/pulumi_gcp/bigquery/connection.py | 4 +- sdk/python/pulumi_gcp/bigquery/routine.py | 4 +- sdk/python/pulumi_gcp/billing/project_info.py | 8 +- sdk/python/pulumi_gcp/chronicle/__init__.py | 3 + sdk/python/pulumi_gcp/chronicle/_inputs.py | 379 +++ .../pulumi_gcp/chronicle/data_access_label.py | 42 +- sdk/python/pulumi_gcp/chronicle/outputs.py | 302 ++ .../pulumi_gcp/chronicle/reference_list.py | 788 ++++++ sdk/python/pulumi_gcp/chronicle/rule.py | 1308 +++++++++ .../pulumi_gcp/chronicle/rule_deployment.py | 849 ++++++ sdk/python/pulumi_gcp/colab/__init__.py | 10 + sdk/python/pulumi_gcp/colab/_inputs.py | 359 +++ sdk/python/pulumi_gcp/colab/outputs.py | 344 +++ .../pulumi_gcp/colab/runtime_template.py | 1160 ++++++++ sdk/python/pulumi_gcp/compute/_inputs.py | 18 +- .../compute/interconnect_attachment.py | 14 +- sdk/python/pulumi_gcp/compute/outputs.py | 12 +- sdk/python/pulumi_gcp/compute/route.py | 24 +- sdk/python/pulumi_gcp/compute/subnetwork.py | 14 +- .../pulumi_gcp/compute/target_instance.py | 8 +- sdk/python/pulumi_gcp/compute/url_map.py | 4 + sdk/python/pulumi_gcp/config/__init__.pyi | 6 + sdk/python/pulumi_gcp/config/vars.py | 12 + .../connection_profile.py | 12 +- sdk/python/pulumi_gcp/dataplex/entry_type.py | 4 +- sdk/python/pulumi_gcp/dataplex/task.py | 32 +- sdk/python/pulumi_gcp/dataproc/batch.py | 20 +- .../pulumi_gcp/discoveryengine/_inputs.py | 54 + .../pulumi_gcp/discoveryengine/data_store.py | 94 + .../pulumi_gcp/discoveryengine/outputs.py | 51 + sdk/python/pulumi_gcp/edgenetwork/__init__.py | 1 + .../edgenetwork/interconnect_attachment.py | 941 +++++++ sdk/python/pulumi_gcp/firestore/field.py | 8 +- .../gemini/code_repository_index.py | 47 + .../pulumi_gcp/gkehub/membership_binding.py | 12 +- .../gkehub/membership_rbac_role_binding.py | 8 +- sdk/python/pulumi_gcp/gkehub/namespace.py | 8 +- .../gkehub/scope_rbac_role_binding.py | 8 +- .../pulumi_gcp/iap/tunnel_dest_group.py | 4 +- .../integrationconnectors/managed_zone.py | 16 +- .../pulumi_gcp/networkconnectivity/spoke.py | 28 +- .../networksecurity/authz_policy.py | 202 -- sdk/python/pulumi_gcp/orgpolicy/policy.py | 4 +- .../pulumi_gcp/parametermanager/__init__.py | 13 + .../pulumi_gcp/parametermanager/_inputs.py | 174 ++ .../get_regional_parameter.py | 230 ++ .../pulumi_gcp/parametermanager/outputs.py | 191 ++ .../pulumi_gcp/parametermanager/parameter.py | 706 +++++ .../parametermanager/regional_parameter.py | 762 ++++++ .../regional_parameter_version.py | 558 ++++ sdk/python/pulumi_gcp/provider.py | 60 + sdk/python/pulumi_gcp/pubsub/subscription.py | 12 +- sdk/python/pulumi_gcp/sql/_inputs.py | 54 + .../pulumi_gcp/sql/database_instance.py | 94 +- .../pulumi_gcp/sql/get_database_instance.py | 13 +- sdk/python/pulumi_gcp/sql/outputs.py | 122 + .../sql/source_representation_instance.py | 21 +- sdk/python/pulumi_gcp/vertex/ai_endpoint.py | 8 +- .../ai_feature_online_store_featureview.py | 8 +- upstream | 2 +- 470 files changed, 49936 insertions(+), 1601 deletions(-) create mode 100644 sdk/dotnet/Apigee/EnvironmentAddonsConfig.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListEntryArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListEntryGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleSeverityArgs.cs create mode 100644 sdk/dotnet/Chronicle/Inputs/RuleSeverityGetArgs.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/ReferenceListEntry.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfo.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfoReferenceListScope.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnostic.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnosticPosition.cs create mode 100644 sdk/dotnet/Chronicle/Outputs/RuleSeverity.cs create mode 100644 sdk/dotnet/Chronicle/ReferenceList.cs create mode 100644 sdk/dotnet/Chronicle/Rule.cs create mode 100644 sdk/dotnet/Chronicle/RuleDeployment.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecGetArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigArgs.cs create mode 100644 sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigGetArgs.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateDataPersistentDiskSpec.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateEncryptionSpec.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateEucConfig.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateIdleShutdownConfig.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateMachineSpec.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateNetworkSpec.cs create mode 100644 sdk/dotnet/Colab/Outputs/RuntimeTemplateShieldedVmConfig.cs create mode 100644 sdk/dotnet/Colab/README.md create mode 100644 sdk/dotnet/Colab/RuntimeTemplate.cs create mode 100644 sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigArgs.cs create mode 100644 sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigGetArgs.cs create mode 100644 sdk/dotnet/DiscoveryEngine/Outputs/DataStoreAdvancedSiteSearchConfig.cs create mode 100644 sdk/dotnet/EdgeNetwork/InterconnectAttachment.cs create mode 100644 sdk/dotnet/ParameterManager/GetRegionalParameter.cs create mode 100644 sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberArgs.cs create mode 100644 sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberGetArgs.cs create mode 100644 sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberArgs.cs create mode 100644 sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberGetArgs.cs create mode 100644 sdk/dotnet/ParameterManager/Outputs/GetRegionalParameterPolicyMemberResult.cs create mode 100644 sdk/dotnet/ParameterManager/Outputs/ParameterPolicyMember.cs create mode 100644 sdk/dotnet/ParameterManager/Outputs/RegionalParameterPolicyMember.cs create mode 100644 sdk/dotnet/ParameterManager/Parameter.cs create mode 100644 sdk/dotnet/ParameterManager/README.md create mode 100644 sdk/dotnet/ParameterManager/RegionalParameter.cs create mode 100644 sdk/dotnet/ParameterManager/RegionalParameterVersion.cs create mode 100644 sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterArgs.cs create mode 100644 sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterGetArgs.cs create mode 100644 sdk/dotnet/Sql/Outputs/DatabaseInstanceReplicationCluster.cs create mode 100644 sdk/dotnet/Sql/Outputs/GetDatabaseInstanceReplicationClusterResult.cs create mode 100644 sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceReplicationClusterResult.cs create mode 100644 sdk/go/gcp/apigee/environmentAddonsConfig.go create mode 100644 sdk/go/gcp/chronicle/referenceList.go create mode 100644 sdk/go/gcp/chronicle/rule.go create mode 100644 sdk/go/gcp/chronicle/ruleDeployment.go create mode 100644 sdk/go/gcp/colab/init.go create mode 100644 sdk/go/gcp/colab/pulumiTypes.go create mode 100644 sdk/go/gcp/colab/runtimeTemplate.go create mode 100644 sdk/go/gcp/edgenetwork/interconnectAttachment.go create mode 100644 sdk/go/gcp/parametermanager/getRegionalParameter.go create mode 100644 sdk/go/gcp/parametermanager/init.go create mode 100644 sdk/go/gcp/parametermanager/parameter.go create mode 100644 sdk/go/gcp/parametermanager/pulumiTypes.go create mode 100644 sdk/go/gcp/parametermanager/regionalParameter.go create mode 100644 sdk/go/gcp/parametermanager/regionalParameterVersion.go create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/EnvironmentAddonsConfigState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceList.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceListArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/Rule.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeployment.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeploymentArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListEntryArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoReferenceListScopeArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticPositionArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleDeploymentState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleSeverityArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListEntry.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfo.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfoReferenceListScope.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnostic.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnosticPosition.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleSeverity.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplate.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplateArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateDataPersistentDiskSpecArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEncryptionSpecArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEucConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateIdleShutdownConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateMachineSpecArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateNetworkSpecArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateShieldedVmConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateDataPersistentDiskSpec.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEncryptionSpec.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEucConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateIdleShutdownConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateMachineSpec.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateNetworkSpec.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateShieldedVmConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreAdvancedSiteSearchConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/outputs/DataStoreAdvancedSiteSearchConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachment.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachmentArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/inputs/InterconnectAttachmentState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/Parameter.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParameterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParametermanagerFunctions.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameter.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersion.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersionArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterPlainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterPolicyMemberArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterPolicyMemberArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterVersionState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterPolicyMember.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterResult.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/ParameterPolicyMember.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/RegionalParameterPolicyMember.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceReplicationClusterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceReplicationCluster.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceReplicationCluster.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceReplicationCluster.java create mode 100644 sdk/nodejs/apigee/environmentAddonsConfig.ts create mode 100644 sdk/nodejs/chronicle/referenceList.ts create mode 100644 sdk/nodejs/chronicle/rule.ts create mode 100644 sdk/nodejs/chronicle/ruleDeployment.ts create mode 100644 sdk/nodejs/colab/index.ts create mode 100644 sdk/nodejs/colab/runtimeTemplate.ts create mode 100644 sdk/nodejs/edgenetwork/interconnectAttachment.ts create mode 100644 sdk/nodejs/parametermanager/getRegionalParameter.ts create mode 100644 sdk/nodejs/parametermanager/index.ts create mode 100644 sdk/nodejs/parametermanager/parameter.ts create mode 100644 sdk/nodejs/parametermanager/regionalParameter.ts create mode 100644 sdk/nodejs/parametermanager/regionalParameterVersion.ts create mode 100644 sdk/python/pulumi_gcp/apigee/environment_addons_config.py create mode 100644 sdk/python/pulumi_gcp/chronicle/reference_list.py create mode 100644 sdk/python/pulumi_gcp/chronicle/rule.py create mode 100644 sdk/python/pulumi_gcp/chronicle/rule_deployment.py create mode 100644 sdk/python/pulumi_gcp/colab/__init__.py create mode 100644 sdk/python/pulumi_gcp/colab/_inputs.py create mode 100644 sdk/python/pulumi_gcp/colab/outputs.py create mode 100644 sdk/python/pulumi_gcp/colab/runtime_template.py create mode 100644 sdk/python/pulumi_gcp/edgenetwork/interconnect_attachment.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/__init__.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/_inputs.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/get_regional_parameter.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/outputs.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/parameter.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/regional_parameter.py create mode 100644 sdk/python/pulumi_gcp/parametermanager/regional_parameter_version.py diff --git a/patches/0001-Allow-disabling-the-partner-name.patch b/patches/0001-Allow-disabling-the-partner-name.patch index 72994bceb3..bbcb337697 100644 --- a/patches/0001-Allow-disabling-the-partner-name.patch +++ b/patches/0001-Allow-disabling-the-partner-name.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Allow disabling the partner name Add options to set or disable partner name. diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go -index 02e416341..97cef6303 100644 +index aca7ba22c..79e0bbcff 100644 --- a/google-beta/provider/provider.go +++ b/google-beta/provider/provider.go @@ -125,6 +125,19 @@ func Provider() *schema.Provider { @@ -29,7 +29,7 @@ index 02e416341..97cef6303 100644 "request_reason": { Type: schema.TypeString, Optional: true, -@@ -948,6 +961,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr +@@ -963,6 +976,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr UserAgent: p.UserAgent("terraform-provider-google-beta", version.ProviderVersion), } diff --git a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch index 3557155f32..501851e549 100644 --- a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch +++ b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add nil checks for sql database instance flattening diff --git a/google-beta/services/sql/resource_sql_database_instance.go b/google-beta/services/sql/resource_sql_database_instance.go -index d6fb25a5d..68f0c2fff 100644 +index 3f823c609..ea9082cb2 100644 --- a/google-beta/services/sql/resource_sql_database_instance.go +++ b/google-beta/services/sql/resource_sql_database_instance.go -@@ -2188,6 +2188,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) +@@ -2221,6 +2221,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) } func flattenSettings(settings *sqladmin.Settings, d *schema.ResourceData) []map[string]interface{} { @@ -19,7 +19,7 @@ index d6fb25a5d..68f0c2fff 100644 data := map[string]interface{}{ "version": settings.SettingsVersion, "tier": settings.Tier, -@@ -2288,6 +2292,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ +@@ -2321,6 +2325,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ } func flattenBackupConfiguration(backupConfiguration *sqladmin.BackupConfiguration) []map[string]interface{} { @@ -30,7 +30,7 @@ index d6fb25a5d..68f0c2fff 100644 data := map[string]interface{}{ "binary_log_enabled": backupConfiguration.BinaryLogEnabled, "enabled": backupConfiguration.Enabled, -@@ -2380,6 +2388,10 @@ func flattenDatabaseFlags(databaseFlags []*sqladmin.DatabaseFlags) []map[string] +@@ -2429,6 +2437,10 @@ func flattenReplicationCluster(replicationCluster *sqladmin.ReplicationCluster, } func flattenIpConfiguration(ipConfiguration *sqladmin.IpConfiguration, d *schema.ResourceData) interface{} { @@ -41,7 +41,7 @@ index d6fb25a5d..68f0c2fff 100644 data := map[string]interface{}{ "ipv4_enabled": ipConfiguration.Ipv4Enabled, "private_network": ipConfiguration.PrivateNetwork, -@@ -2443,6 +2455,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { +@@ -2492,6 +2504,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { } func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) interface{} { @@ -52,7 +52,7 @@ index d6fb25a5d..68f0c2fff 100644 data := map[string]interface{}{ "follow_gae_application": locationPreference.FollowGaeApplication, "zone": locationPreference.Zone, -@@ -2453,6 +2469,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) +@@ -2502,6 +2518,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) } func flattenMaintenanceWindow(maintenanceWindow *sqladmin.MaintenanceWindow) interface{} { @@ -63,7 +63,7 @@ index d6fb25a5d..68f0c2fff 100644 data := map[string]interface{}{ "day": maintenanceWindow.Day, "hour": maintenanceWindow.Hour, -@@ -2528,6 +2548,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} +@@ -2577,6 +2597,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} } func flattenInsightsConfig(insightsConfig *sqladmin.InsightsConfig) interface{} { diff --git a/patches/0005-docs-patching.patch b/patches/0005-docs-patching.patch index 828e3148aa..062ba02eff 100644 --- a/patches/0005-docs-patching.patch +++ b/patches/0005-docs-patching.patch @@ -669,7 +669,7 @@ index df91843c5..40b452e03 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance.html.markdown b/website/docs/r/compute_instance.html.markdown -index a9d0efc64..794b8b8d4 100644 +index 1fddef270..417939d56 100644 --- a/website/docs/r/compute_instance.html.markdown +++ b/website/docs/r/compute_instance.html.markdown @@ -140,7 +140,7 @@ The following arguments are supported: @@ -825,7 +825,7 @@ index c7a253e6d..fd7c0580c 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance_template.html.markdown b/website/docs/r/compute_instance_template.html.markdown -index b73f4c095..7b4923115 100644 +index efe4969eb..69d9d53d6 100644 --- a/website/docs/r/compute_instance_template.html.markdown +++ b/website/docs/r/compute_instance_template.html.markdown @@ -183,12 +183,11 @@ resource "google_compute_instance_template" "foobar" { @@ -1523,7 +1523,7 @@ index e96d17f09..bbd005a6a 100644 resource "google_compute_ssl_certificate" "default" { name_prefix = "my-certificate-" diff --git a/website/docs/r/compute_subnetwork.html.markdown b/website/docs/r/compute_subnetwork.html.markdown -index 2818f72b0..93b55e24e 100644 +index 1ba64e0db..a047ac09f 100644 --- a/website/docs/r/compute_subnetwork.html.markdown +++ b/website/docs/r/compute_subnetwork.html.markdown @@ -391,9 +391,6 @@ The following arguments are supported: @@ -3558,7 +3558,7 @@ index b6e4a06bd..a775c628e 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 6f6e2e668..585819a79 100644 +index 8992cfead..79ca28100 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 @@ -3629,7 +3629,7 @@ index 6f6e2e668..585819a79 100644 block during resource creation/update will trigger the restore action after the resource is created/updated. * `backup_run_id` - (Required) The ID of the backup run to restore from. -@@ -585,21 +581,13 @@ instance. +@@ -591,21 +587,13 @@ instance. * A `PRIVATE` address is an address for an instance which has been configured to use private networking see: [Private IP](https://cloud.google.com/sql/docs/mysql/private-ip). diff --git a/patches/0007-Remove-duplicative-resource-token.patch b/patches/0007-Remove-duplicative-resource-token.patch index 71f2205804..12466bfa23 100644 --- a/patches/0007-Remove-duplicative-resource-token.patch +++ b/patches/0007-Remove-duplicative-resource-token.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove duplicative resource token diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go -index 97cef6303..24b310860 100644 +index 79e0bbcff..578b8360b 100644 --- a/google-beta/provider/provider.go +++ b/google-beta/provider/provider.go -@@ -921,6 +921,15 @@ func Provider() *schema.Provider { +@@ -936,6 +936,15 @@ func Provider() *schema.Provider { func DatasourceMap() map[string]*schema.Resource { datasourceMap, _ := DatasourceMapWithErrors() diff --git a/patches/0008-Fix-794-with-an-unconditional-read.patch b/patches/0008-Fix-794-with-an-unconditional-read.patch index e42c33e54b..5a6f566743 100644 --- a/patches/0008-Fix-794-with-an-unconditional-read.patch +++ b/patches/0008-Fix-794-with-an-unconditional-read.patch @@ -5,10 +5,10 @@ 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 68f0c2fff..686242ff7 100644 +index ea9082cb2..f283d41f0 100644 --- a/google-beta/services/sql/resource_sql_database_instance.go +++ b/google-beta/services/sql/resource_sql_database_instance.go -@@ -2017,10 +2017,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{}) +@@ -2043,10 +2043,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{}) if err != nil { return err } diff --git a/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch b/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch index d83ca6e440..0ac0c78832 100644 --- a/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch +++ b/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rename default provisioning label to goog-pulumi-provisioned diff --git a/google-beta/transport/config.go b/google-beta/transport/config.go -index b88e939d5..a98602771 100644 +index 87d27968d..2ae7e8f5f 100644 --- a/google-beta/transport/config.go +++ b/google-beta/transport/config.go -@@ -671,7 +671,7 @@ var DefaultClientScopes = []string{ +@@ -680,7 +680,7 @@ var DefaultClientScopes = []string{ "https://www.googleapis.com/auth/userinfo.email", } diff --git a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json index a0d45c4928..7e98c9844e 100644 --- a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json +++ b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json @@ -1345,6 +1345,10 @@ } } }, + "google_apigee_environment_addons_config": { + "current": "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", + "majorVersion": 8 + }, "google_apigee_environment_iam_binding": { "current": "gcp:apigee/environmentIamBinding:EnvironmentIamBinding", "majorVersion": 8, @@ -3434,6 +3438,75 @@ } } }, + "google_chronicle_reference_list": { + "current": "gcp:chronicle/referenceList:ReferenceList", + "majorVersion": 8, + "fields": { + "entries": { + "maxItemsOne": false + }, + "rules": { + "maxItemsOne": false + }, + "scope_info": { + "maxItemsOne": false, + "elem": { + "fields": { + "reference_list_scope": { + "maxItemsOne": true, + "elem": { + "fields": { + "scope_names": { + "maxItemsOne": false + } + } + } + } + } + } + } + } + }, + "google_chronicle_rule": { + "current": "gcp:chronicle/rule:Rule", + "majorVersion": 8, + "fields": { + "allowed_run_frequencies": { + "maxItemsOne": false + }, + "compilation_diagnostics": { + "maxItemsOne": false, + "elem": { + "fields": { + "position": { + "maxItemsOne": true + } + } + } + }, + "data_tables": { + "maxItemsOne": false + }, + "reference_lists": { + "maxItemsOne": false + }, + "severity": { + "maxItemsOne": false + } + } + }, + "google_chronicle_rule_deployment": { + "current": "gcp:chronicle/ruleDeployment:RuleDeployment", + "majorVersion": 8, + "fields": { + "consumer_rules": { + "maxItemsOne": false + }, + "producer_rules": { + "maxItemsOne": false + } + } + }, "google_chronicle_watchlist": { "current": "gcp:chronicle/watchlist:Watchlist", "majorVersion": 8, @@ -5296,6 +5369,36 @@ "current": "gcp:cloudfunctions/functionIamPolicy:FunctionIamPolicy", "majorVersion": 8 }, + "google_colab_runtime_template": { + "current": "gcp:colab/runtimeTemplate:RuntimeTemplate", + "majorVersion": 8, + "fields": { + "data_persistent_disk_spec": { + "maxItemsOne": true + }, + "encryption_spec": { + "maxItemsOne": true + }, + "euc_config": { + "maxItemsOne": true + }, + "idle_shutdown_config": { + "maxItemsOne": true + }, + "machine_spec": { + "maxItemsOne": true + }, + "network_spec": { + "maxItemsOne": true + }, + "network_tags": { + "maxItemsOne": false + }, + "shielded_vm_config": { + "maxItemsOne": true + } + } + }, "google_composer_environment": { "current": "gcp:composer/environment:Environment", "majorVersion": 8, @@ -17448,6 +17551,9 @@ "current": "gcp:discoveryengine/dataStore:DataStore", "majorVersion": 8, "fields": { + "advanced_site_search_config": { + "maxItemsOne": true + }, "document_processing_config": { "maxItemsOne": true, "elem": { @@ -18042,6 +18148,10 @@ } } }, + "google_edgenetwork_interconnect_attachment": { + "current": "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", + "majorVersion": 8 + }, "google_edgenetwork_network": { "current": "gcp:edgenetwork/network:Network", "majorVersion": 8 @@ -25157,6 +25267,28 @@ } } }, + "google_parameter_manager_parameter": { + "current": "gcp:parametermanager/parameter:Parameter", + "majorVersion": 8, + "fields": { + "policy_member": { + "maxItemsOne": false + } + } + }, + "google_parameter_manager_regional_parameter": { + "current": "gcp:parametermanager/regionalParameter:RegionalParameter", + "majorVersion": 8, + "fields": { + "policy_member": { + "maxItemsOne": false + } + } + }, + "google_parameter_manager_regional_parameter_version": { + "current": "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", + "majorVersion": 8 + }, "google_privateca_ca_pool": { "current": "gcp:certificateauthority/caPool:CaPool", "majorVersion": 8, @@ -27754,6 +27886,9 @@ "replica_names": { "maxItemsOne": false }, + "replication_cluster": { + "maxItemsOne": true + }, "restore_backup_context": { "maxItemsOne": true }, @@ -35064,6 +35199,15 @@ "current": "gcp:organizations/getOrganization:getOrganization", "majorVersion": 8 }, + "google_parameter_manager_regional_parameter": { + "current": "gcp:parametermanager/getRegionalParameter:getRegionalParameter", + "majorVersion": 8, + "fields": { + "policy_member": { + "maxItemsOne": false + } + } + }, "google_privateca_ca_pool_iam_policy": { "current": "gcp:certificateauthority/getCaPoolIamPolicy:getCaPoolIamPolicy", "majorVersion": 8 @@ -35919,6 +36063,9 @@ "replica_names": { "maxItemsOne": false }, + "replication_cluster": { + "maxItemsOne": false + }, "restore_backup_context": { "maxItemsOne": false }, @@ -36031,6 +36178,9 @@ "replica_names": { "maxItemsOne": false }, + "replication_cluster": { + "maxItemsOne": false + }, "restore_backup_context": { "maxItemsOne": false }, @@ -36753,6 +36903,10 @@ "effective_labels", "terraform_labels" ], + "google_colab_runtime_template": [ + "effective_labels", + "terraform_labels" + ], "google_composer_environment": [ "effective_labels", "terraform_labels" @@ -36961,6 +37115,10 @@ "effective_labels", "terraform_labels" ], + "google_edgenetwork_interconnect_attachment": [ + "effective_labels", + "terraform_labels" + ], "google_edgenetwork_network": [ "effective_labels", "terraform_labels" @@ -37309,6 +37467,14 @@ "effective_labels", "terraform_labels" ], + "google_parameter_manager_parameter": [ + "effective_labels", + "terraform_labels" + ], + "google_parameter_manager_regional_parameter": [ + "effective_labels", + "terraform_labels" + ], "google_privateca_ca_pool": [ "effective_labels", "terraform_labels" @@ -37607,6 +37773,10 @@ "cloud_vm_clusters.$.effective_labels", "cloud_vm_clusters.$.terraform_labels" ], + "google_parameter_manager_regional_parameter": [ + "effective_labels", + "terraform_labels" + ], "google_privateca_certificate_authority": [ "effective_labels", "terraform_labels" @@ -37722,6 +37892,7 @@ "gcp:apigee/envKeystore:EnvKeystore": 0, "gcp:apigee/envReferences:EnvReferences": 0, "gcp:apigee/environment:Environment": 0, + "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig": 0, "gcp:apigee/environmentIamBinding:EnvironmentIamBinding": 0, "gcp:apigee/environmentIamMember:EnvironmentIamMember": 0, "gcp:apigee/environmentIamPolicy:EnvironmentIamPolicy": 0, @@ -37843,6 +38014,9 @@ "gcp:certificatemanager/trustConfig:TrustConfig": 0, "gcp:chronicle/dataAccessLabel:DataAccessLabel": 0, "gcp:chronicle/dataAccessScope:DataAccessScope": 0, + "gcp:chronicle/referenceList:ReferenceList": 0, + "gcp:chronicle/rule:Rule": 0, + "gcp:chronicle/ruleDeployment:RuleDeployment": 0, "gcp:chronicle/watchlist:Watchlist": 0, "gcp:cloudasset/folderFeed:FolderFeed": 0, "gcp:cloudasset/organizationFeed:OrganizationFeed": 0, @@ -37900,6 +38074,7 @@ "gcp:cloudtasks/queueIamBinding:QueueIamBinding": 0, "gcp:cloudtasks/queueIamMember:QueueIamMember": 0, "gcp:cloudtasks/queueIamPolicy:QueueIamPolicy": 0, + "gcp:colab/runtimeTemplate:RuntimeTemplate": 0, "gcp:composer/environment:Environment": 0, "gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap": 0, "gcp:composer/userWorkloadsSecret:UserWorkloadsSecret": 0, @@ -38196,6 +38371,7 @@ "gcp:edgecontainer/cluster:Cluster": 0, "gcp:edgecontainer/nodePool:NodePool": 0, "gcp:edgecontainer/vpnConnection:VpnConnection": 0, + "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment": 0, "gcp:edgenetwork/network:Network": 0, "gcp:edgenetwork/subnet:Subnet": 0, "gcp:endpoints/consumersIamBinding:ConsumersIamBinding": 0, @@ -38504,6 +38680,9 @@ "gcp:osconfig/patchDeployment:PatchDeployment": 0, "gcp:oslogin/sshPublicKey:SshPublicKey": 0, "gcp:parallelstore/instance:Instance": 0, + "gcp:parametermanager/parameter:Parameter": 0, + "gcp:parametermanager/regionalParameter:RegionalParameter": 0, + "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion": 0, "gcp:privilegedaccessmanager/entitlement:entitlement": 0, "gcp:projects/accessApprovalSettings:AccessApprovalSettings": 0, "gcp:projects/apiKey:ApiKey": 0, @@ -38979,6 +39158,7 @@ "gcp:organizations/getIAMPolicy:getIAMPolicy": 0, "gcp:organizations/getOrganization:getOrganization": 0, "gcp:organizations/getProject:getProject": 0, + "gcp:parametermanager/getRegionalParameter:getRegionalParameter": 0, "gcp:privilegedaccessmanager/getEntitlement:getEntitlement": 0, "gcp:projects/getIamPolicy:getIamPolicy": 0, "gcp:projects/getOrganizationPolicy:getOrganizationPolicy": 0, diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json index bc74e56c6e..f315c3f814 100644 --- a/provider/cmd/pulumi-resource-gcp/schema.json +++ b/provider/cmd/pulumi-resource-gcp/schema.json @@ -57,6 +57,7 @@ "cloudrunv2": "CloudRunV2", "cloudscheduler": "CloudScheduler", "cloudtasks": "CloudTasks", + "colab": "Colab", "composer": "Composer", "compute": "Compute", "container": "Container", @@ -116,6 +117,7 @@ "osconfig": "OsConfig", "oslogin": "OsLogin", "parallelstore": "ParallelStore", + "parametermanager": "ParameterManager", "privilegedaccessmanager": "PrivilegedAccessManager", "projects": "Projects", "pubsub": "PubSub", @@ -326,6 +328,9 @@ "cloudfunctions2CustomEndpoint": { "type": "string" }, + "colabCustomEndpoint": { + "type": "string" + }, "composerCustomEndpoint": { "type": "string" }, @@ -593,6 +598,12 @@ "parallelstoreCustomEndpoint": { "type": "string" }, + "parameterManagerCustomEndpoint": { + "type": "string" + }, + "parameterManagerRegionalCustomEndpoint": { + "type": "string" + }, "privatecaCustomEndpoint": { "type": "string" }, @@ -16287,6 +16298,112 @@ "ingestionLabelKey" ] }, + "gcp:chronicle/ReferenceListEntry:ReferenceListEntry": { + "properties": { + "value": { + "type": "string", + "description": "Required. The value of the entry. Maximum length is 512 characters.\n\n- - -\n" + } + }, + "type": "object", + "required": [ + "value" + ] + }, + "gcp:chronicle/ReferenceListScopeInfo:ReferenceListScopeInfo": { + "properties": { + "referenceListScope": { + "$ref": "#/types/gcp:chronicle/ReferenceListScopeInfoReferenceListScope:ReferenceListScopeInfoReferenceListScope", + "description": "ReferenceListScope specifies the list of scope names of the reference list.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "referenceListScope" + ] + }, + "gcp:chronicle/ReferenceListScopeInfoReferenceListScope:ReferenceListScopeInfoReferenceListScope": { + "properties": { + "scopeNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. The list of scope names of the reference list. The scope names should be\nfull resource names and should be of the format:\n\"projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}\".\n" + } + }, + "type": "object" + }, + "gcp:chronicle/RuleCompilationDiagnostic:RuleCompilationDiagnostic": { + "properties": { + "message": { + "type": "string", + "description": "(Output)\nOutput only. The diagnostic message.\n" + }, + "position": { + "$ref": "#/types/gcp:chronicle/RuleCompilationDiagnosticPosition:RuleCompilationDiagnosticPosition", + "description": "CompilationPosition represents the location of a compilation diagnostic in\nrule text.\nStructure is documented below.\n" + }, + "severity": { + "type": "string", + "description": "(Output)\nOutput only. The severity of a rule's compilation diagnostic.\nPossible values:\nSEVERITY_UNSPECIFIED\nWARNING\nERROR\n" + }, + "uri": { + "type": "string", + "description": "(Output)\nOutput only. Link to documentation that describes a diagnostic in more detail.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "message", + "severity", + "uri" + ] + } + } + }, + "gcp:chronicle/RuleCompilationDiagnosticPosition:RuleCompilationDiagnosticPosition": { + "properties": { + "endColumn": { + "type": "integer", + "description": "(Output)\nOutput only. End column number, beginning at 1.\n" + }, + "endLine": { + "type": "integer", + "description": "(Output)\nOutput only. End line number, beginning at 1.\n" + }, + "startColumn": { + "type": "integer", + "description": "(Output)\nOutput only. Start column number, beginning at 1.\n" + }, + "startLine": { + "type": "integer", + "description": "(Output)\nOutput only. Start line number, beginning at 1.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "endColumn", + "endLine", + "startColumn", + "startLine" + ] + } + } + }, + "gcp:chronicle/RuleSeverity:RuleSeverity": { + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the severity level. Extracted from the meta section of\nthe rule text.\n" + } + }, + "type": "object" + }, "gcp:chronicle/WatchlistEntityCount:WatchlistEntityCount": { "properties": { "asset": { @@ -29115,6 +29232,131 @@ "samplingRatio" ] }, + "gcp:colab/RuntimeTemplateDataPersistentDiskSpec:RuntimeTemplateDataPersistentDiskSpec": { + "properties": { + "diskSizeGb": { + "type": "string", + "description": "The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB.\n", + "willReplaceOnChanges": true + }, + "diskType": { + "type": "string", + "description": "The type of the persistent disk.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "diskSizeGb", + "diskType" + ] + } + } + }, + "gcp:colab/RuntimeTemplateEncryptionSpec:RuntimeTemplateEncryptionSpec": { + "properties": { + "kmsKeyName": { + "type": "string", + "description": "The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + }, + "gcp:colab/RuntimeTemplateEucConfig:RuntimeTemplateEucConfig": { + "properties": { + "eucDisabled": { + "type": "boolean", + "description": "Disable end user credential access for the runtime.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + }, + "gcp:colab/RuntimeTemplateIdleShutdownConfig:RuntimeTemplateIdleShutdownConfig": { + "properties": { + "idleTimeout": { + "type": "string", + "description": "The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h].\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "idleTimeout" + ] + } + } + }, + "gcp:colab/RuntimeTemplateMachineSpec:RuntimeTemplateMachineSpec": { + "properties": { + "acceleratorCount": { + "type": "integer", + "description": "The number of accelerators used by the runtime.\n", + "willReplaceOnChanges": true + }, + "acceleratorType": { + "type": "string", + "description": "The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified.\n", + "willReplaceOnChanges": true + }, + "machineType": { + "type": "string", + "description": "The Compute Engine machine type selected for the runtime.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "acceleratorCount", + "machineType" + ] + } + } + }, + "gcp:colab/RuntimeTemplateNetworkSpec:RuntimeTemplateNetworkSpec": { + "properties": { + "enableInternetAccess": { + "type": "boolean", + "description": "Enable public internet access for the runtime.\n", + "willReplaceOnChanges": true + }, + "network": { + "type": "string", + "description": "The name of the VPC that this runtime is in.\n", + "willReplaceOnChanges": true + }, + "subnetwork": { + "type": "string", + "description": "The name of the subnetwork that this runtime is in.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "network" + ] + } + } + }, + "gcp:colab/RuntimeTemplateShieldedVmConfig:RuntimeTemplateShieldedVmConfig": { + "properties": { + "enableSecureBoot": { + "type": "boolean", + "description": "Enables secure boot for the runtime.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + }, "gcp:composer/EnvironmentConfig:EnvironmentConfig": { "properties": { "airflowUri": { @@ -35250,7 +35492,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n" + "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n" }, "subnetwork": { "type": "string", @@ -35982,7 +36224,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n", + "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n", "willReplaceOnChanges": true }, "subnetwork": { @@ -39511,7 +39753,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n", + "description": "The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used.\n", "willReplaceOnChanges": true }, "subnetwork": { @@ -39530,6 +39772,7 @@ "nodejs": { "requiredOutputs": [ "internalIpv6PrefixLength", + "ipv6AccessConfigs", "ipv6AccessType", "ipv6Address", "name", @@ -85514,6 +85757,19 @@ }, "type": "object" }, + "gcp:discoveryengine/DataStoreAdvancedSiteSearchConfig:DataStoreAdvancedSiteSearchConfig": { + "properties": { + "disableAutomaticRefresh": { + "type": "boolean", + "description": "If set true, automatic refresh is disabled for the DataStore.\n" + }, + "disableInitialIndex": { + "type": "boolean", + "description": "If set true, initial indexing is disabled for the DataStore.\n" + } + }, + "type": "object" + }, "gcp:discoveryengine/DataStoreDocumentProcessingConfig:DataStoreDocumentProcessingConfig": { "properties": { "chunkingConfig": { @@ -113204,6 +113460,70 @@ }, "type": "object" }, + "gcp:parametermanager/ParameterPolicyMember:ParameterPolicyMember": { + "properties": { + "iamPolicyNamePrincipal": { + "type": "string", + "description": "(Output)\nIAM policy binding member referring to a Google Cloud resource by user-assigned name. If a\nresource is deleted and recreated with the same name, the binding will be applicable to the\nnew resource. Format:\n`principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}`\n" + }, + "iamPolicyUidPrincipal": { + "type": "string", + "description": "(Output)\nIAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier.\nIf a resource is deleted and recreated with the same name, the binding will not be applicable to the\nnew resource. Format:\n`principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}`\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "iamPolicyNamePrincipal", + "iamPolicyUidPrincipal" + ] + } + } + }, + "gcp:parametermanager/RegionalParameterPolicyMember:RegionalParameterPolicyMember": { + "properties": { + "iamPolicyNamePrincipal": { + "type": "string", + "description": "(Output)\nIAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is\ndeleted and recreated with the same name, the binding will be applicable to the new resource. Format:\n`principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}`\n" + }, + "iamPolicyUidPrincipal": { + "type": "string", + "description": "(Output)\nIAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If\na resource is deleted and recreated with the same name, the binding will not be applicable to the new\nresource. Format:\n`principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}`\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "iamPolicyNamePrincipal", + "iamPolicyUidPrincipal" + ] + } + } + }, + "gcp:parametermanager/getRegionalParameterPolicyMember:getRegionalParameterPolicyMember": { + "properties": { + "iamPolicyNamePrincipal": { + "type": "string", + "description": "IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is\ndeleted and recreated with the same name, the binding will be applicable to the new resource. Format:\n'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}'\n" + }, + "iamPolicyUidPrincipal": { + "type": "string", + "description": "IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If\na resource is deleted and recreated with the same name, the binding will not be applicable to the new\nresource. Format:\n'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}'\n" + } + }, + "type": "object", + "required": [ + "iamPolicyNamePrincipal", + "iamPolicyUidPrincipal" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:privilegedaccessmanager/entitlementAdditionalNotificationTargets:entitlementAdditionalNotificationTargets": { "properties": { "adminEmailRecipients": { @@ -119554,6 +119874,26 @@ }, "type": "object" }, + "gcp:sql/DatabaseInstanceReplicationCluster:DatabaseInstanceReplicationCluster": { + "properties": { + "drReplica": { + "type": "boolean", + "description": "Read-only field that indicates whether the replica is a DR replica.\n" + }, + "failoverDrReplicaName": { + "type": "string", + "description": "If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is \"your-project:your-instance\". You can also set this field to \"your-instance\", but cloud SQL backend will convert it to the aforementioned standard format.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "drReplica" + ] + } + } + }, "gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext": { "properties": { "backupRunId": { @@ -120357,6 +120697,28 @@ } } }, + "gcp:sql/getDatabaseInstanceReplicationCluster:getDatabaseInstanceReplicationCluster": { + "properties": { + "drReplica": { + "type": "boolean", + "description": "Read-only field that indicates whether the replica is a DR replica.\n" + }, + "failoverDrReplicaName": { + "type": "string", + "description": "If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is \"your-project:your-instance\". You can also set this field to \"your-instance\", but cloud SQL backend will convert it to the aforementioned standard format.\n" + } + }, + "type": "object", + "required": [ + "drReplica", + "failoverDrReplicaName" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:sql/getDatabaseInstanceRestoreBackupContext:getDatabaseInstanceRestoreBackupContext": { "properties": { "backupRunId": { @@ -121171,6 +121533,13 @@ }, "description": "The replicas of the instance.\n" }, + "replicationClusters": { + "type": "array", + "items": { + "$ref": "#/types/gcp:sql/getDatabaseInstancesInstanceReplicationCluster:getDatabaseInstancesInstanceReplicationCluster" + }, + "description": "A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created.\n" + }, "restoreBackupContexts": { "type": "array", "items": { @@ -121225,6 +121594,7 @@ "region", "replicaConfigurations", "replicaNames", + "replicationClusters", "restoreBackupContexts", "rootPassword", "selfLink", @@ -121374,6 +121744,28 @@ } } }, + "gcp:sql/getDatabaseInstancesInstanceReplicationCluster:getDatabaseInstancesInstanceReplicationCluster": { + "properties": { + "drReplica": { + "type": "boolean", + "description": "Read-only field that indicates whether the replica is a DR replica.\n" + }, + "failoverDrReplicaName": { + "type": "string", + "description": "If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is \"your-project:your-instance\". You can also set this field to \"your-instance\", but cloud SQL backend will convert it to the aforementioned standard format.\n" + } + }, + "type": "object", + "required": [ + "drReplica", + "failoverDrReplicaName" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:sql/getDatabaseInstancesInstanceRestoreBackupContext:getDatabaseInstancesInstanceRestoreBackupContext": { "properties": { "backupRunId": { @@ -129612,6 +130004,9 @@ "cloudfunctions2CustomEndpoint": { "type": "string" }, + "colabCustomEndpoint": { + "type": "string" + }, "composerCustomEndpoint": { "type": "string" }, @@ -129870,6 +130265,12 @@ "parallelstoreCustomEndpoint": { "type": "string" }, + "parameterManagerCustomEndpoint": { + "type": "string" + }, + "parameterManagerRegionalCustomEndpoint": { + "type": "string" + }, "privatecaCustomEndpoint": { "type": "string" }, @@ -130167,6 +130568,9 @@ "cloudfunctions2CustomEndpoint": { "type": "string" }, + "colabCustomEndpoint": { + "type": "string" + }, "composerCustomEndpoint": { "type": "string" }, @@ -130425,6 +130829,12 @@ "parallelstoreCustomEndpoint": { "type": "string" }, + "parameterManagerCustomEndpoint": { + "type": "string" + }, + "parameterManagerRegionalCustomEndpoint": { + "type": "string" + }, "privatecaCustomEndpoint": { "type": "string" }, @@ -130708,6 +131118,10 @@ "type": "string", "description": "The name of the Access Level to add this condition to.\n\n\n- - -\n" }, + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "devicePolicy": { "$ref": "#/types/gcp:accesscontextmanager/AccessLevelConditionDevicePolicy:AccessLevelConditionDevicePolicy", "description": "Device specific restrictions, all restrictions must hold for\nthe Condition to be true. If not specified, all devices are\nallowed.\nStructure is documented below.\n" @@ -130753,7 +131167,8 @@ } }, "required": [ - "accessLevel" + "accessLevel", + "accessPolicyId" ], "inputProperties": { "accessLevel": { @@ -130823,6 +131238,10 @@ "description": "The name of the Access Level to add this condition to.\n\n\n- - -\n", "willReplaceOnChanges": true }, + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "devicePolicy": { "$ref": "#/types/gcp:accesscontextmanager/AccessLevelConditionDevicePolicy:AccessLevelConditionDevicePolicy", "description": "Device specific restrictions, all restrictions must hold for\nthe Condition to be true. If not specified, all devices are\nallowed.\nStructure is documented below.\n", @@ -131394,6 +131813,10 @@ "gcp:accesscontextmanager/egressPolicy:EgressPolicy": { "description": "This resource has been deprecated, please refer to ServicePerimeterEgressPolicy.\n\n\nTo get more information about EgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n\n## Import\n\nEgressPolicy can be imported using any of these accepted formats:\n\n* `{{egress_policy_name}}/{{resource}}`\n\nWhen using the `pulumi import` command, EgressPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/egressPolicy:EgressPolicy default {{egress_policy_name}}/{{resource}}\n```\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "egressPolicyName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n" @@ -131404,6 +131827,7 @@ } }, "required": [ + "accessPolicyId", "egressPolicyName", "resource" ], @@ -131426,6 +131850,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering EgressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "egressPolicyName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n", @@ -131515,6 +131943,10 @@ "gcp:accesscontextmanager/ingressPolicy:IngressPolicy": { "description": "This resource has been deprecated, please refer to ServicePerimeterIngressPolicy.\n\n\nTo get more information about IngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n\n## Import\n\nIngressPolicy can be imported using any of these accepted formats:\n\n* `{{ingress_policy_name}}/{{resource}}`\n\nWhen using the `pulumi import` command, IngressPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/ingressPolicy:IngressPolicy default {{ingress_policy_name}}/{{resource}}\n```\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "ingressPolicyName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n" @@ -131525,6 +131957,7 @@ } }, "required": [ + "accessPolicyId", "ingressPolicyName", "resource" ], @@ -131547,6 +131980,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering IngressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "ingressPolicyName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n", @@ -131706,6 +132143,10 @@ "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\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].egress_policies]` so\nthey don't fight over which egress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterDryRunEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "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" @@ -131720,6 +132161,7 @@ } }, "required": [ + "accessPolicyId", "perimeter" ], "inputProperties": { @@ -131745,6 +132187,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterDryRunEgressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "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", @@ -131767,6 +132213,10 @@ "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\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].ingress_policies]` so\nthey don't fight over which ingress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterDryRunIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "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" @@ -131781,6 +132231,7 @@ } }, "required": [ + "accessPolicyId", "perimeter" ], "inputProperties": { @@ -131806,6 +132257,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterDryRunIngressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "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", @@ -131828,6 +132283,10 @@ "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/v8/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": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "perimeterName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n" @@ -131838,6 +132297,7 @@ } }, "required": [ + "accessPolicyId", "perimeterName", "resource" ], @@ -131860,6 +132320,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterDryRunResource resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "perimeterName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n", @@ -131877,6 +132341,10 @@ "gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy": { "description": "Manage a single EgressPolicy in the status (enforced) configuration for a service perimeter.\nEgressPolicies match requests based on egressFrom and egressTo stanzas.\nFor an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.\nIf an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter\nboundary. For example, an EgressPolicy can be used to allow VMs on networks\nwithin the ServicePerimeter to access a defined set of projects outside the\nperimeter in certain contexts (e.g. to read data from a Cloud Storage bucket\nor query against a BigQuery dataset).\n\n\u003e **Note:** By default, updates to this resource will remove the EgressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].egress_policies]` so\nthey don't fight over which egress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "egressFrom": { "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterEgressPolicyEgressFrom:ServicePerimeterEgressPolicyEgressFrom", "description": "Defines conditions on the source of a request causing this `EgressPolicy` to apply.\nStructure is documented below.\n" @@ -131891,6 +132359,7 @@ } }, "required": [ + "accessPolicyId", "perimeter" ], "inputProperties": { @@ -131916,6 +132385,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterEgressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "egressFrom": { "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterEgressPolicyEgressFrom:ServicePerimeterEgressPolicyEgressFrom", "description": "Defines conditions on the source of a request causing this `EgressPolicy` to apply.\nStructure is documented below.\n", @@ -131938,6 +132411,10 @@ "gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy": { "description": "Manage a single IngressPolicy in the status (enforced) configuration for a service perimeter.\nIngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,\nboth the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,\nthe request is allowed through the perimeter boundary from outside the perimeter.\nFor example, access from the internet can be allowed either based on an AccessLevel or,\nfor traffic hosted on Google Cloud, the project of the source network.\nFor access from private networks, using the project of the hosting network is required.\nIndividual ingress policies can be limited by restricting which services and/\nor actions they match using the ingressTo field.\n\n\u003e **Note:** By default, updates to this resource will remove the IngressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].ingress_policies]` so\nthey don't fight over which ingress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "ingressFrom": { "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterIngressPolicyIngressFrom:ServicePerimeterIngressPolicyIngressFrom", "description": "Defines the conditions on the source of a request causing this `IngressPolicy`\nto apply.\nStructure is documented below.\n" @@ -131952,6 +132429,7 @@ } }, "required": [ + "accessPolicyId", "perimeter" ], "inputProperties": { @@ -131977,6 +132455,10 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterIngressPolicy resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, "ingressFrom": { "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterIngressPolicyIngressFrom:ServicePerimeterIngressPolicyIngressFrom", "description": "Defines the conditions on the source of a request causing this `IngressPolicy`\nto apply.\nStructure is documented below.\n", @@ -131999,6 +132481,14 @@ "gcp:accesscontextmanager/servicePerimeterResource:ServicePerimeterResource": { "description": "Allows configuring a single GCP resource that should be inside the `status` block of a 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 in dry-run mode use `gcp.accesscontextmanager.ServicePerimeterDryRunResource` 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 = [status[0].resources]` so\nthey don't fight over which resources should be in the policy.\n\n\nTo get more information about ServicePerimeterResource, 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 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_resourceServicePerimeter = new gcp.accesscontextmanager.ServicePerimeter(\"service-perimeter-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 status: {\n restrictedServices: [\"storage.googleapis.com\"],\n },\n});\nconst service_perimeter_resource = new gcp.accesscontextmanager.ServicePerimeterResource(\"service-perimeter-resource\", {\n perimeterName: service_perimeter_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_resource_service_perimeter = gcp.accesscontextmanager.ServicePerimeter(\"service-perimeter-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 status={\n \"restricted_services\": [\"storage.googleapis.com\"],\n })\nservice_perimeter_resource = gcp.accesscontextmanager.ServicePerimeterResource(\"service-perimeter-resource\",\n perimeter_name=service_perimeter_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_resourceServicePerimeter = new Gcp.AccessContextManager.ServicePerimeter(\"service-perimeter-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 Status = new Gcp.AccessContextManager.Inputs.ServicePerimeterStatusArgs\n {\n RestrictedServices = new[]\n {\n \"storage.googleapis.com\",\n },\n },\n });\n\n var service_perimeter_resource = new Gcp.AccessContextManager.ServicePerimeterResource(\"service-perimeter-resource\", new()\n {\n PerimeterName = service_perimeter_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/v8/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-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\tStatus: \u0026accesscontextmanager.ServicePerimeterStatusArgs{\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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = accesscontextmanager.NewServicePerimeterResource(ctx, \"service-perimeter-resource\", \u0026accesscontextmanager.ServicePerimeterResourceArgs{\n\t\t\tPerimeterName: service_perimeter_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.ServicePerimeterStatusArgs;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeterResource;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeterResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_resourceServicePerimeter = new ServicePerimeter(\"service-perimeter-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 .status(ServicePerimeterStatusArgs.builder()\n .restrictedServices(\"storage.googleapis.com\")\n .build())\n .build());\n\n var service_perimeter_resource = new ServicePerimeterResource(\"service-perimeter-resource\", ServicePerimeterResourceArgs.builder()\n .perimeterName(service_perimeter_resourceServicePerimeter.name())\n .resource(\"projects/987654321\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n service-perimeter-resource:\n type: gcp:accesscontextmanager:ServicePerimeterResource\n properties:\n perimeterName: ${[\"service-perimeter-resourceServicePerimeter\"].name}\n resource: projects/987654321\n service-perimeter-resourceServicePerimeter:\n type: gcp:accesscontextmanager:ServicePerimeter\n name: service-perimeter-resource\n properties:\n parent: accessPolicies/${[\"access-policy\"].name}\n name: accessPolicies/${[\"access-policy\"].name}/servicePerimeters/restrict_all\n title: restrict_all\n status:\n restrictedServices:\n - storage.googleapis.com\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\nServicePerimeterResource can be imported using any of these accepted formats:\n\n* `{{perimeter_name}}/{{resource}}`\n\nWhen using the `pulumi import` command, ServicePerimeterResource can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/servicePerimeterResource:ServicePerimeterResource default {{perimeter_name}}/{{resource}}\n```\n\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, + "etag": { + "type": "string", + "description": "The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list.\n" + }, "perimeterName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n" @@ -132009,6 +132499,8 @@ } }, "required": [ + "accessPolicyId", + "etag", "perimeterName", "resource" ], @@ -132031,6 +132523,14 @@ "stateInputs": { "description": "Input properties used for looking up and filtering ServicePerimeterResource resources.\n", "properties": { + "accessPolicyId": { + "type": "string", + "description": "The name of the Access Policy this resource belongs to.\n" + }, + "etag": { + "type": "string", + "description": "The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list.\n" + }, "perimeterName": { "type": "string", "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n", @@ -136404,6 +136904,51 @@ "type": "object" } }, + "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig": { + "description": "Enable/Disable add-ons for an Apigee environment.\n\n\nTo get more information about EnvironmentAddonsConfig, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement)\n* How-to Guides\n * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on)\n\n## Example Usage\n\n## Import\n\nEnvironmentAddonsConfig can be imported using any of these accepted formats:\n\n* `{{env_id}}`\n\nWhen using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}}\n```\n\n", + "properties": { + "analyticsEnabled": { + "type": "boolean", + "description": "Flag to enable/disable Analytics.\n" + }, + "envId": { + "type": "string", + "description": "The Apigee environment group associated with the Apigee environment,\nin the format `organizations/{{org_name}}/environments/{{env_name}}`.\n\n\n- - -\n" + } + }, + "required": [ + "envId" + ], + "inputProperties": { + "analyticsEnabled": { + "type": "boolean", + "description": "Flag to enable/disable Analytics.\n" + }, + "envId": { + "type": "string", + "description": "The Apigee environment group associated with the Apigee environment,\nin the format `organizations/{{org_name}}/environments/{{env_name}}`.\n\n\n- - -\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "envId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering EnvironmentAddonsConfig resources.\n", + "properties": { + "analyticsEnabled": { + "type": "boolean", + "description": "Flag to enable/disable Analytics.\n" + }, + "envId": { + "type": "string", + "description": "The Apigee environment group associated with the Apigee environment,\nin the format `organizations/{{org_name}}/environments/{{env_name}}`.\n\n\n- - -\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:apigee/environmentIamBinding:EnvironmentIamBinding": { "description": "Three different resources help you manage your IAM policy for Apigee Environment. Each of these resources serves a different use case:\n\n* `gcp.apigee.EnvironmentIamPolicy`: Authoritative. Sets the IAM policy for the environment and replaces any existing policy already attached.\n* `gcp.apigee.EnvironmentIamBinding`: 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 environment are preserved.\n* `gcp.apigee.EnvironmentIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the environment are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.apigee.EnvironmentIamPolicy`: Retrieves the IAM policy for the environment\n\n\u003e **Note:** `gcp.apigee.EnvironmentIamPolicy` **cannot** be used in conjunction with `gcp.apigee.EnvironmentIamBinding` and `gcp.apigee.EnvironmentIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigee.EnvironmentIamBinding` resources **can be** used in conjunction with `gcp.apigee.EnvironmentIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.apigee.EnvironmentIamPolicy\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.apigee.EnvironmentIamPolicy(\"policy\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamPolicy(\"policy\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamPolicy(\"policy\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewEnvironmentIamPolicy(ctx, \"policy\", \u0026apigee.EnvironmentIamPolicyArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamPolicy;\nimport com.pulumi.gcp.apigee.EnvironmentIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 EnvironmentIamPolicy(\"policy\", EnvironmentIamPolicyArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigee:EnvironmentIamPolicy\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.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.apigee.EnvironmentIamBinding\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.apigee.EnvironmentIamBinding(\"binding\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamBinding(\"binding\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamBinding(\"binding\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigee.NewEnvironmentIamBinding(ctx, \"binding\", \u0026apigee.EnvironmentIamBindingArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamBinding;\nimport com.pulumi.gcp.apigee.EnvironmentIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnvironmentIamBinding(\"binding\", EnvironmentIamBindingArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.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:apigee:EnvironmentIamBinding\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.apigee.EnvironmentIamMember\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.apigee.EnvironmentIamMember(\"member\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamMember(\"member\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamMember(\"member\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigee.NewEnvironmentIamMember(ctx, \"member\", \u0026apigee.EnvironmentIamMemberArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamMember;\nimport com.pulumi.gcp.apigee.EnvironmentIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnvironmentIamMember(\"member\", EnvironmentIamMemberArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.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:apigee:EnvironmentIamMember\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.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 Apigee Environment\nThree different resources help you manage your IAM policy for Apigee Environment. Each of these resources serves a different use case:\n\n* `gcp.apigee.EnvironmentIamPolicy`: Authoritative. Sets the IAM policy for the environment and replaces any existing policy already attached.\n* `gcp.apigee.EnvironmentIamBinding`: 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 environment are preserved.\n* `gcp.apigee.EnvironmentIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the environment are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.apigee.EnvironmentIamPolicy`: Retrieves the IAM policy for the environment\n\n\u003e **Note:** `gcp.apigee.EnvironmentIamPolicy` **cannot** be used in conjunction with `gcp.apigee.EnvironmentIamBinding` and `gcp.apigee.EnvironmentIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigee.EnvironmentIamBinding` resources **can be** used in conjunction with `gcp.apigee.EnvironmentIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.apigee.EnvironmentIamPolicy\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.apigee.EnvironmentIamPolicy(\"policy\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamPolicy(\"policy\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamPolicy(\"policy\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewEnvironmentIamPolicy(ctx, \"policy\", \u0026apigee.EnvironmentIamPolicyArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamPolicy;\nimport com.pulumi.gcp.apigee.EnvironmentIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 EnvironmentIamPolicy(\"policy\", EnvironmentIamPolicyArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigee:EnvironmentIamPolicy\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.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.apigee.EnvironmentIamBinding\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.apigee.EnvironmentIamBinding(\"binding\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamBinding(\"binding\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamBinding(\"binding\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigee.NewEnvironmentIamBinding(ctx, \"binding\", \u0026apigee.EnvironmentIamBindingArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamBinding;\nimport com.pulumi.gcp.apigee.EnvironmentIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnvironmentIamBinding(\"binding\", EnvironmentIamBindingArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.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:apigee:EnvironmentIamBinding\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.apigee.EnvironmentIamMember\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.apigee.EnvironmentIamMember(\"member\", {\n orgId: apigeeEnvironment.orgId,\n envId: apigeeEnvironment.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.apigee.EnvironmentIamMember(\"member\",\n org_id=apigee_environment[\"orgId\"],\n env_id=apigee_environment[\"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.Apigee.EnvironmentIamMember(\"member\", new()\n {\n OrgId = apigeeEnvironment.OrgId,\n EnvId = apigeeEnvironment.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigee.NewEnvironmentIamMember(ctx, \"member\", \u0026apigee.EnvironmentIamMemberArgs{\n\t\t\tOrgId: pulumi.Any(apigeeEnvironment.OrgId),\n\t\t\tEnvId: pulumi.Any(apigeeEnvironment.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.apigee.EnvironmentIamMember;\nimport com.pulumi.gcp.apigee.EnvironmentIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnvironmentIamMember(\"member\", EnvironmentIamMemberArgs.builder()\n .orgId(apigeeEnvironment.orgId())\n .envId(apigeeEnvironment.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:apigee:EnvironmentIamMember\n properties:\n orgId: ${apigeeEnvironment.orgId}\n envId: ${apigeeEnvironment.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* {{org_id}}/environments/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nApigee environment 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:apigee/environmentIamBinding:EnvironmentIamBinding editor \"{{org_id}}/environments/{{environment}} 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:apigee/environmentIamBinding:EnvironmentIamBinding editor \"{{org_id}}/environments/{{environment}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:apigee/environmentIamBinding:EnvironmentIamBinding editor {{org_id}}/environments/{{environment}}\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": { @@ -140638,7 +141183,7 @@ } }, "gcp:artifactregistry/repository:Repository": { - "description": "A repository for storing artifacts\n\n\nTo get more information about Repository, see:\n\n* [API documentation](https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/artifact-registry/docs/overview)\n\n## Example Usage\n\n### Artifact Registry Repository Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Multi Region\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n location: \"us\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n location=\"us\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Location = \"us\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .location(\"us\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n repositoryId: my-repository\n description: example docker repository\n location: us\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n dockerConfig: {\n immutableTags: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n docker_config={\n \"immutable_tags\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n DockerConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryDockerConfigArgs\n {\n ImmutableTags = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tDockerConfig: \u0026artifactregistry.RepositoryDockerConfigArgs{\n\t\t\t\tImmutableTags: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryDockerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .dockerConfig(RepositoryDockerConfigArgs.builder()\n .immutableTags(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n dockerConfig:\n immutableTags: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cmek\",\n format: \"DOCKER\",\n kmsKeyName: \"kms-key\",\n}, {\n dependsOn: [cryptoKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cmek\",\n format=\"DOCKER\",\n kms_key_name=\"kms-key\",\n opts = pulumi.ResourceOptions(depends_on=[crypto_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cmek\",\n Format = \"DOCKER\",\n KmsKeyName = \"kms-key\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cmek\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tKmsKeyName: pulumi.String(\"kms-key\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cmek\")\n .format(\"DOCKER\")\n .kmsKeyName(\"kms-key\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cmek\n format: DOCKER\n kmsKeyName: kms-key\n options:\n dependsOn:\n - ${cryptoKey}\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Virtual\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo_upstream_1 = new gcp.artifactregistry.Repository(\"my-repo-upstream-1\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-1\",\n description: \"example docker repository (upstream source) 1\",\n format: \"DOCKER\",\n});\nconst my_repo_upstream_2 = new gcp.artifactregistry.Repository(\"my-repo-upstream-2\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-2\",\n description: \"example docker repository (upstream source) 2\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example virtual docker repository\",\n format: \"DOCKER\",\n mode: \"VIRTUAL_REPOSITORY\",\n virtualRepositoryConfig: {\n upstreamPolicies: [\n {\n id: \"my-repository-upstream-1\",\n repository: my_repo_upstream_1.id,\n priority: 20,\n },\n {\n id: \"my-repository-upstream-2\",\n repository: my_repo_upstream_2.id,\n priority: 10,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo_upstream_1 = gcp.artifactregistry.Repository(\"my-repo-upstream-1\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-1\",\n description=\"example docker repository (upstream source) 1\",\n format=\"DOCKER\")\nmy_repo_upstream_2 = gcp.artifactregistry.Repository(\"my-repo-upstream-2\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-2\",\n description=\"example docker repository (upstream source) 2\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example virtual docker repository\",\n format=\"DOCKER\",\n mode=\"VIRTUAL_REPOSITORY\",\n virtual_repository_config={\n \"upstream_policies\": [\n {\n \"id\": \"my-repository-upstream-1\",\n \"repository\": my_repo_upstream_1.id,\n \"priority\": 20,\n },\n {\n \"id\": \"my-repository-upstream-2\",\n \"repository\": my_repo_upstream_2.id,\n \"priority\": 10,\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo_upstream_1 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-1\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-1\",\n Description = \"example docker repository (upstream source) 1\",\n Format = \"DOCKER\",\n });\n\n var my_repo_upstream_2 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-2\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-2\",\n Description = \"example docker repository (upstream source) 2\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example virtual docker repository\",\n Format = \"DOCKER\",\n Mode = \"VIRTUAL_REPOSITORY\",\n VirtualRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigArgs\n {\n UpstreamPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-1\",\n Repository = my_repo_upstream_1.Id,\n Priority = 20,\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-2\",\n Repository = my_repo_upstream_2.Id,\n Priority = 10,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo-upstream-1\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 1\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo-upstream-2\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 2\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example virtual docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"VIRTUAL_REPOSITORY\"),\n\t\t\tVirtualRepositoryConfig: \u0026artifactregistry.RepositoryVirtualRepositoryConfigArgs{\n\t\t\t\tUpstreamPolicies: artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArray{\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_1.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(20),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_2.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVirtualRepositoryConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo_upstream_1 = new Repository(\"my-repo-upstream-1\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-1\")\n .description(\"example docker repository (upstream source) 1\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo_upstream_2 = new Repository(\"my-repo-upstream-2\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-2\")\n .description(\"example docker repository (upstream source) 2\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example virtual docker repository\")\n .format(\"DOCKER\")\n .mode(\"VIRTUAL_REPOSITORY\")\n .virtualRepositoryConfig(RepositoryVirtualRepositoryConfigArgs.builder()\n .upstreamPolicies( \n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-1\")\n .repository(my_repo_upstream_1.id())\n .priority(20)\n .build(),\n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-2\")\n .repository(my_repo_upstream_2.id())\n .priority(10)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo-upstream-1:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-1\n description: example docker repository (upstream source) 1\n format: DOCKER\n my-repo-upstream-2:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-2\n description: example docker repository (upstream source) 2\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example virtual docker repository\n format: DOCKER\n mode: VIRTUAL_REPOSITORY\n virtualRepositoryConfig:\n upstreamPolicies:\n - id: my-repository-upstream-1\n repository: ${[\"my-repo-upstream-1\"].id}\n priority: 20\n - id: my-repository-upstream-2\n repository: ${[\"my-repo-upstream-2\"].id}\n priority: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example remote docker repository\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub\",\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example remote docker repository\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub\",\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example remote docker repository\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub\",\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example remote docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub\"),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example remote docker repository\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub\")\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example remote docker repository\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub\n dockerRepository:\n publicRepository: DOCKER_HUB\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Apt\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"debian-buster\",\n description: \"example remote apt repository\",\n format: \"APT\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Debian buster remote repository\",\n aptRepository: {\n publicRepository: {\n repositoryBase: \"DEBIAN\",\n repositoryPath: \"debian/dists/buster\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"debian-buster\",\n description=\"example remote apt repository\",\n format=\"APT\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Debian buster remote repository\",\n \"apt_repository\": {\n \"public_repository\": {\n \"repository_base\": \"DEBIAN\",\n \"repository_path\": \"debian/dists/buster\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"debian-buster\",\n Description = \"example remote apt repository\",\n Format = \"APT\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Debian buster remote repository\",\n AptRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"DEBIAN\",\n RepositoryPath = \"debian/dists/buster\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"debian-buster\"),\n\t\t\tDescription: pulumi.String(\"example remote apt repository\"),\n\t\t\tFormat: pulumi.String(\"APT\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Debian buster remote repository\"),\n\t\t\t\tAptRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"DEBIAN\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"debian/dists/buster\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"debian-buster\")\n .description(\"example remote apt repository\")\n .format(\"APT\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Debian buster remote repository\")\n .aptRepository(RepositoryRemoteRepositoryConfigAptRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"DEBIAN\")\n .repositoryPath(\"debian/dists/buster\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: debian-buster\n description: example remote apt repository\n format: APT\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Debian buster remote repository\n aptRepository:\n publicRepository:\n repositoryBase: DEBIAN\n repositoryPath: debian/dists/buster\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Yum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"rocky-9\",\n description: \"example remote yum repository\",\n format: \"YUM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Rocky 9 remote repository\",\n yumRepository: {\n publicRepository: {\n repositoryBase: \"ROCKY\",\n repositoryPath: \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"rocky-9\",\n description=\"example remote yum repository\",\n format=\"YUM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Rocky 9 remote repository\",\n \"yum_repository\": {\n \"public_repository\": {\n \"repository_base\": \"ROCKY\",\n \"repository_path\": \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"rocky-9\",\n Description = \"example remote yum repository\",\n Format = \"YUM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Rocky 9 remote repository\",\n YumRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"ROCKY\",\n RepositoryPath = \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"rocky-9\"),\n\t\t\tDescription: pulumi.String(\"example remote yum repository\"),\n\t\t\tFormat: pulumi.String(\"YUM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Rocky 9 remote repository\"),\n\t\t\t\tYumRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"ROCKY\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"pub/rocky/9/BaseOS/x86_64/os\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"rocky-9\")\n .description(\"example remote yum repository\")\n .format(\"YUM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Rocky 9 remote repository\")\n .yumRepository(RepositoryRemoteRepositoryConfigYumRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"ROCKY\")\n .repositoryPath(\"pub/rocky/9/BaseOS/x86_64/os\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: rocky-9\n description: example remote yum repository\n format: YUM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Rocky 9 remote repository\n yumRepository:\n publicRepository:\n repositoryBase: ROCKY\n repositoryPath: pub/rocky/9/BaseOS/x86_64/os\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cleanup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cleanup policies\",\n format: \"DOCKER\",\n cleanupPolicyDryRun: false,\n cleanupPolicies: [\n {\n id: \"delete-prerelease\",\n action: \"DELETE\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\n \"alpha\",\n \"v0\",\n ],\n olderThan: \"2592000s\",\n },\n },\n {\n id: \"keep-tagged-release\",\n action: \"KEEP\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\"release\"],\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n id: \"keep-minimum-versions\",\n action: \"KEEP\",\n mostRecentVersions: {\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n keepCount: 5,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cleanup policies\",\n format=\"DOCKER\",\n cleanup_policy_dry_run=False,\n cleanup_policies=[\n {\n \"id\": \"delete-prerelease\",\n \"action\": \"DELETE\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\n \"alpha\",\n \"v0\",\n ],\n \"older_than\": \"2592000s\",\n },\n },\n {\n \"id\": \"keep-tagged-release\",\n \"action\": \"KEEP\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\"release\"],\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n \"id\": \"keep-minimum-versions\",\n \"action\": \"KEEP\",\n \"most_recent_versions\": {\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n \"keep_count\": 5,\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cleanup policies\",\n Format = \"DOCKER\",\n CleanupPolicyDryRun = false,\n CleanupPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"delete-prerelease\",\n Action = \"DELETE\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"alpha\",\n \"v0\",\n },\n OlderThan = \"2592000s\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-tagged-release\",\n Action = \"KEEP\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"release\",\n },\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n },\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-minimum-versions\",\n Action = \"KEEP\",\n MostRecentVersions = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyMostRecentVersionsArgs\n {\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n },\n KeepCount = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cleanup policies\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tCleanupPolicyDryRun: pulumi.Bool(false),\n\t\t\tCleanupPolicies: artifactregistry.RepositoryCleanupPolicyArray{\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"delete-prerelease\"),\n\t\t\t\t\tAction: pulumi.String(\"DELETE\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"alpha\"),\n\t\t\t\t\t\t\tpulumi.String(\"v0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOlderThan: pulumi.String(\"2592000s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-tagged-release\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"release\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-minimum-versions\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tMostRecentVersions: \u0026artifactregistry.RepositoryCleanupPolicyMostRecentVersionsArgs{\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t\tpulumi.String(\"sandbox\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKeepCount: pulumi.Int(5),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyConditionArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyMostRecentVersionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cleanup policies\")\n .format(\"DOCKER\")\n .cleanupPolicyDryRun(false)\n .cleanupPolicies( \n RepositoryCleanupPolicyArgs.builder()\n .id(\"delete-prerelease\")\n .action(\"DELETE\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes( \n \"alpha\",\n \"v0\")\n .olderThan(\"2592000s\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-tagged-release\")\n .action(\"KEEP\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes(\"release\")\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-minimum-versions\")\n .action(\"KEEP\")\n .mostRecentVersions(RepositoryCleanupPolicyMostRecentVersionsArgs.builder()\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\",\n \"sandbox\")\n .keepCount(5)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cleanup policies\n format: DOCKER\n cleanupPolicyDryRun: false\n cleanupPolicies:\n - id: delete-prerelease\n action: DELETE\n condition:\n tagState: TAGGED\n tagPrefixes:\n - alpha\n - v0\n olderThan: 2592000s\n - id: keep-tagged-release\n action: KEEP\n condition:\n tagState: TAGGED\n tagPrefixes:\n - release\n packageNamePrefixes:\n - webapp\n - mobile\n - id: keep-minimum-versions\n action: KEEP\n mostRecentVersions:\n packageNamePrefixes:\n - webapp\n - mobile\n - sandbox\n keepCount: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Dockerhub Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-dockerhub-remote\",\n description: \"example remote dockerhub repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub with custom credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-dockerhub-remote\",\n description=\"example remote dockerhub repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub with custom credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-dockerhub-remote\",\n Description = \"example remote dockerhub repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub with custom credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-dockerhub-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote dockerhub repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub with custom credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-dockerhub-remote\")\n .description(\"example remote dockerhub repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub with custom credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-dockerhub-remote\n description: example remote dockerhub repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub with custom credentials\n disableUpstreamValidation: true\n dockerRepository:\n publicRepository: DOCKER_HUB\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Docker Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom docker remote with credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n customRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom docker remote with credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom docker remote with credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom docker remote with credentials\n disableUpstreamValidation: true\n dockerRepository:\n customRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Maven Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-maven-custom-remote\",\n description: \"example remote custom maven repository with credentials\",\n format: \"MAVEN\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom maven remote with credentials\",\n disableUpstreamValidation: true,\n mavenRepository: {\n customRepository: {\n uri: \"https://my.maven.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-maven-custom-remote\",\n description=\"example remote custom maven repository with credentials\",\n format=\"MAVEN\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom maven remote with credentials\",\n \"disable_upstream_validation\": True,\n \"maven_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.maven.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-maven-custom-remote\",\n Description = \"example remote custom maven repository with credentials\",\n Format = \"MAVEN\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom maven remote with credentials\",\n DisableUpstreamValidation = true,\n MavenRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.maven.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-maven-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom maven repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"MAVEN\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom maven remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tMavenRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.maven.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-maven-custom-remote\")\n .description(\"example remote custom maven repository with credentials\")\n .format(\"MAVEN\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom maven remote with credentials\")\n .disableUpstreamValidation(true)\n .mavenRepository(RepositoryRemoteRepositoryConfigMavenRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.maven.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-maven-custom-remote\n description: example remote custom maven repository with credentials\n format: MAVEN\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom maven remote with credentials\n disableUpstreamValidation: true\n mavenRepository:\n customRepository:\n uri: https://my.maven.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Npm Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-npm-custom-remote\",\n description: \"example remote custom npm repository with credentials\",\n format: \"NPM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n npmRepository: {\n customRepository: {\n uri: \"https://my.npm.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-npm-custom-remote\",\n description=\"example remote custom npm repository with credentials\",\n format=\"NPM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"npm_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.npm.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-npm-custom-remote\",\n Description = \"example remote custom npm repository with credentials\",\n Format = \"NPM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n NpmRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.npm.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-npm-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom npm repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"NPM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tNpmRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.npm.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-npm-custom-remote\")\n .description(\"example remote custom npm repository with credentials\")\n .format(\"NPM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .npmRepository(RepositoryRemoteRepositoryConfigNpmRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.npm.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-npm-custom-remote\n description: example remote custom npm repository with credentials\n format: NPM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n npmRepository:\n customRepository:\n uri: https://my.npm.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Python Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-python-custom-remote\",\n description: \"example remote custom python repository with credentials\",\n format: \"PYTHON\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n pythonRepository: {\n customRepository: {\n uri: \"https://my.python.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-python-custom-remote\",\n description=\"example remote custom python repository with credentials\",\n format=\"PYTHON\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"python_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.python.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-python-custom-remote\",\n Description = \"example remote custom python repository with credentials\",\n Format = \"PYTHON\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n PythonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.python.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-python-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom python repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"PYTHON\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tPythonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.python.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-python-custom-remote\")\n .description(\"example remote custom python repository with credentials\")\n .format(\"PYTHON\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .pythonRepository(RepositoryRemoteRepositoryConfigPythonRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.python.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-python-custom-remote\n description: example remote custom python repository with credentials\n format: PYTHON\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n pythonRepository:\n customRepository:\n uri: https://my.python.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository\",\n commonRepository: {\n uri: upstreamRepo.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository\",\n \"common_repository\": {\n \"uri\": upstream_repo.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = upstreamRepo.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: upstreamRepo.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(upstreamRepo.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository\n commonRepository:\n uri: ${upstreamRepo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository by URL\",\n commonRepository: {\n uri: project.then(project =\u003e `https://us-central1-docker.pkg.dev/${project.projectId}/example-upstream-repo`),\n },\n },\n}, {\n dependsOn: [upstreamRepo],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository by URL\",\n \"common_repository\": {\n \"uri\": f\"https://us-central1-docker.pkg.dev/{project.project_id}/example-upstream-repo\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[upstream_repo]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository by URL\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = $\"https://us-central1-docker.pkg.dev/{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}/example-upstream-repo\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n upstreamRepo,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository by URL\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.Sprintf(\"https://us-central1-docker.pkg.dev/%v/example-upstream-repo\", project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tupstreamRepo,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository by URL\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(String.format(\"https://us-central1-docker.pkg.dev/%s/example-upstream-repo\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId())))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(upstreamRepo)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository by URL\n commonRepository:\n uri: https://us-central1-docker.pkg.dev/${project.projectId}/example-upstream-repo\n options:\n dependsOn:\n - ${upstreamRepo}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Custom Upstream\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom common docker remote with credentials\",\n disableUpstreamValidation: true,\n commonRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom common docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"common_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom common docker remote with credentials\",\n DisableUpstreamValidation = true,\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom common docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom common docker remote with credentials\")\n .disableUpstreamValidation(true)\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom common docker remote with credentials\n disableUpstreamValidation: true\n commonRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Vulnerability Scanning\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with vulnerability scanning config\",\n format: \"DOCKER\",\n vulnerabilityScanningConfig: {\n enablementConfig: \"INHERITED\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with vulnerability scanning config\",\n format=\"DOCKER\",\n vulnerability_scanning_config={\n \"enablement_config\": \"INHERITED\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with vulnerability scanning config\",\n Format = \"DOCKER\",\n VulnerabilityScanningConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVulnerabilityScanningConfigArgs\n {\n EnablementConfig = \"INHERITED\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with vulnerability scanning config\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tVulnerabilityScanningConfig: \u0026artifactregistry.RepositoryVulnerabilityScanningConfigArgs{\n\t\t\t\tEnablementConfig: pulumi.String(\"INHERITED\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVulnerabilityScanningConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with vulnerability scanning config\")\n .format(\"DOCKER\")\n .vulnerabilityScanningConfig(RepositoryVulnerabilityScanningConfigArgs.builder()\n .enablementConfig(\"INHERITED\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with vulnerability scanning config\n format: DOCKER\n vulnerabilityScanningConfig:\n enablementConfig: INHERITED\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRepository can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}`\n\n* `{{project}}/{{location}}/{{repository_id}}`\n\n* `{{location}}/{{repository_id}}`\n\nWhen using the `pulumi import` command, Repository can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n", + "description": "A repository for storing artifacts\n\n\nTo get more information about Repository, see:\n\n* [API documentation](https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/artifact-registry/docs/overview)\n\n## Example Usage\n\n### Artifact Registry Repository Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Multi Region\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n location: \"us\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n location=\"us\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Location = \"us\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .location(\"us\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n repositoryId: my-repository\n description: example docker repository\n location: us\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n dockerConfig: {\n immutableTags: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n docker_config={\n \"immutable_tags\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n DockerConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryDockerConfigArgs\n {\n ImmutableTags = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tDockerConfig: \u0026artifactregistry.RepositoryDockerConfigArgs{\n\t\t\t\tImmutableTags: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryDockerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .dockerConfig(RepositoryDockerConfigArgs.builder()\n .immutableTags(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n dockerConfig:\n immutableTags: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cmek\",\n format: \"DOCKER\",\n kmsKeyName: \"kms-key\",\n}, {\n dependsOn: [cryptoKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cmek\",\n format=\"DOCKER\",\n kms_key_name=\"kms-key\",\n opts = pulumi.ResourceOptions(depends_on=[crypto_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cmek\",\n Format = \"DOCKER\",\n KmsKeyName = \"kms-key\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cmek\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tKmsKeyName: pulumi.String(\"kms-key\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cmek\")\n .format(\"DOCKER\")\n .kmsKeyName(\"kms-key\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cmek\n format: DOCKER\n kmsKeyName: kms-key\n options:\n dependsOn:\n - ${cryptoKey}\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Virtual\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo_upstream_1 = new gcp.artifactregistry.Repository(\"my-repo-upstream-1\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-1\",\n description: \"example docker repository (upstream source) 1\",\n format: \"DOCKER\",\n});\nconst my_repo_upstream_2 = new gcp.artifactregistry.Repository(\"my-repo-upstream-2\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-2\",\n description: \"example docker repository (upstream source) 2\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example virtual docker repository\",\n format: \"DOCKER\",\n mode: \"VIRTUAL_REPOSITORY\",\n virtualRepositoryConfig: {\n upstreamPolicies: [\n {\n id: \"my-repository-upstream-1\",\n repository: my_repo_upstream_1.id,\n priority: 20,\n },\n {\n id: \"my-repository-upstream-2\",\n repository: my_repo_upstream_2.id,\n priority: 10,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo_upstream_1 = gcp.artifactregistry.Repository(\"my-repo-upstream-1\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-1\",\n description=\"example docker repository (upstream source) 1\",\n format=\"DOCKER\")\nmy_repo_upstream_2 = gcp.artifactregistry.Repository(\"my-repo-upstream-2\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-2\",\n description=\"example docker repository (upstream source) 2\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example virtual docker repository\",\n format=\"DOCKER\",\n mode=\"VIRTUAL_REPOSITORY\",\n virtual_repository_config={\n \"upstream_policies\": [\n {\n \"id\": \"my-repository-upstream-1\",\n \"repository\": my_repo_upstream_1.id,\n \"priority\": 20,\n },\n {\n \"id\": \"my-repository-upstream-2\",\n \"repository\": my_repo_upstream_2.id,\n \"priority\": 10,\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo_upstream_1 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-1\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-1\",\n Description = \"example docker repository (upstream source) 1\",\n Format = \"DOCKER\",\n });\n\n var my_repo_upstream_2 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-2\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-2\",\n Description = \"example docker repository (upstream source) 2\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example virtual docker repository\",\n Format = \"DOCKER\",\n Mode = \"VIRTUAL_REPOSITORY\",\n VirtualRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigArgs\n {\n UpstreamPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-1\",\n Repository = my_repo_upstream_1.Id,\n Priority = 20,\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-2\",\n Repository = my_repo_upstream_2.Id,\n Priority = 10,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo-upstream-1\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 1\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo-upstream-2\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 2\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example virtual docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"VIRTUAL_REPOSITORY\"),\n\t\t\tVirtualRepositoryConfig: \u0026artifactregistry.RepositoryVirtualRepositoryConfigArgs{\n\t\t\t\tUpstreamPolicies: artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArray{\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_1.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(20),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_2.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVirtualRepositoryConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo_upstream_1 = new Repository(\"my-repo-upstream-1\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-1\")\n .description(\"example docker repository (upstream source) 1\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo_upstream_2 = new Repository(\"my-repo-upstream-2\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-2\")\n .description(\"example docker repository (upstream source) 2\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example virtual docker repository\")\n .format(\"DOCKER\")\n .mode(\"VIRTUAL_REPOSITORY\")\n .virtualRepositoryConfig(RepositoryVirtualRepositoryConfigArgs.builder()\n .upstreamPolicies( \n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-1\")\n .repository(my_repo_upstream_1.id())\n .priority(20)\n .build(),\n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-2\")\n .repository(my_repo_upstream_2.id())\n .priority(10)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo-upstream-1:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-1\n description: example docker repository (upstream source) 1\n format: DOCKER\n my-repo-upstream-2:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-2\n description: example docker repository (upstream source) 2\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example virtual docker repository\n format: DOCKER\n mode: VIRTUAL_REPOSITORY\n virtualRepositoryConfig:\n upstreamPolicies:\n - id: my-repository-upstream-1\n repository: ${[\"my-repo-upstream-1\"].id}\n priority: 20\n - id: my-repository-upstream-2\n repository: ${[\"my-repo-upstream-2\"].id}\n priority: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example remote docker repository\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub\",\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example remote docker repository\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub\",\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example remote docker repository\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub\",\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example remote docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub\"),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example remote docker repository\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub\")\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example remote docker repository\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub\n dockerRepository:\n publicRepository: DOCKER_HUB\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Apt\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"debian-buster\",\n description: \"example remote apt repository\",\n format: \"APT\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Debian buster remote repository\",\n aptRepository: {\n publicRepository: {\n repositoryBase: \"DEBIAN\",\n repositoryPath: \"debian/dists/buster\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"debian-buster\",\n description=\"example remote apt repository\",\n format=\"APT\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Debian buster remote repository\",\n \"apt_repository\": {\n \"public_repository\": {\n \"repository_base\": \"DEBIAN\",\n \"repository_path\": \"debian/dists/buster\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"debian-buster\",\n Description = \"example remote apt repository\",\n Format = \"APT\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Debian buster remote repository\",\n AptRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"DEBIAN\",\n RepositoryPath = \"debian/dists/buster\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"debian-buster\"),\n\t\t\tDescription: pulumi.String(\"example remote apt repository\"),\n\t\t\tFormat: pulumi.String(\"APT\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Debian buster remote repository\"),\n\t\t\t\tAptRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"DEBIAN\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"debian/dists/buster\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"debian-buster\")\n .description(\"example remote apt repository\")\n .format(\"APT\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Debian buster remote repository\")\n .aptRepository(RepositoryRemoteRepositoryConfigAptRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"DEBIAN\")\n .repositoryPath(\"debian/dists/buster\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: debian-buster\n description: example remote apt repository\n format: APT\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Debian buster remote repository\n aptRepository:\n publicRepository:\n repositoryBase: DEBIAN\n repositoryPath: debian/dists/buster\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Yum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"rocky-9\",\n description: \"example remote yum repository\",\n format: \"YUM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Rocky 9 remote repository\",\n yumRepository: {\n publicRepository: {\n repositoryBase: \"ROCKY\",\n repositoryPath: \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"rocky-9\",\n description=\"example remote yum repository\",\n format=\"YUM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Rocky 9 remote repository\",\n \"yum_repository\": {\n \"public_repository\": {\n \"repository_base\": \"ROCKY\",\n \"repository_path\": \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"rocky-9\",\n Description = \"example remote yum repository\",\n Format = \"YUM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Rocky 9 remote repository\",\n YumRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"ROCKY\",\n RepositoryPath = \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"rocky-9\"),\n\t\t\tDescription: pulumi.String(\"example remote yum repository\"),\n\t\t\tFormat: pulumi.String(\"YUM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Rocky 9 remote repository\"),\n\t\t\t\tYumRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"ROCKY\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"pub/rocky/9/BaseOS/x86_64/os\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"rocky-9\")\n .description(\"example remote yum repository\")\n .format(\"YUM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Rocky 9 remote repository\")\n .yumRepository(RepositoryRemoteRepositoryConfigYumRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"ROCKY\")\n .repositoryPath(\"pub/rocky/9/BaseOS/x86_64/os\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: rocky-9\n description: example remote yum repository\n format: YUM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Rocky 9 remote repository\n yumRepository:\n publicRepository:\n repositoryBase: ROCKY\n repositoryPath: pub/rocky/9/BaseOS/x86_64/os\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cleanup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cleanup policies\",\n format: \"DOCKER\",\n cleanupPolicyDryRun: false,\n cleanupPolicies: [\n {\n id: \"delete-untagged\",\n action: \"DELETE\",\n condition: {\n tagState: \"UNTAGGED\",\n },\n },\n {\n id: \"keep-new-untagged\",\n action: \"KEEP\",\n condition: {\n tagState: \"UNTAGGED\",\n newerThan: \"7d\",\n },\n },\n {\n id: \"delete-prerelease\",\n action: \"DELETE\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\n \"alpha\",\n \"v0\",\n ],\n olderThan: \"30d\",\n },\n },\n {\n id: \"keep-tagged-release\",\n action: \"KEEP\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\"release\"],\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n id: \"keep-minimum-versions\",\n action: \"KEEP\",\n mostRecentVersions: {\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n keepCount: 5,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cleanup policies\",\n format=\"DOCKER\",\n cleanup_policy_dry_run=False,\n cleanup_policies=[\n {\n \"id\": \"delete-untagged\",\n \"action\": \"DELETE\",\n \"condition\": {\n \"tag_state\": \"UNTAGGED\",\n },\n },\n {\n \"id\": \"keep-new-untagged\",\n \"action\": \"KEEP\",\n \"condition\": {\n \"tag_state\": \"UNTAGGED\",\n \"newer_than\": \"7d\",\n },\n },\n {\n \"id\": \"delete-prerelease\",\n \"action\": \"DELETE\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\n \"alpha\",\n \"v0\",\n ],\n \"older_than\": \"30d\",\n },\n },\n {\n \"id\": \"keep-tagged-release\",\n \"action\": \"KEEP\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\"release\"],\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n \"id\": \"keep-minimum-versions\",\n \"action\": \"KEEP\",\n \"most_recent_versions\": {\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n \"keep_count\": 5,\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cleanup policies\",\n Format = \"DOCKER\",\n CleanupPolicyDryRun = false,\n CleanupPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"delete-untagged\",\n Action = \"DELETE\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"UNTAGGED\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-new-untagged\",\n Action = \"KEEP\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"UNTAGGED\",\n NewerThan = \"7d\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"delete-prerelease\",\n Action = \"DELETE\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"alpha\",\n \"v0\",\n },\n OlderThan = \"30d\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-tagged-release\",\n Action = \"KEEP\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"release\",\n },\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n },\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-minimum-versions\",\n Action = \"KEEP\",\n MostRecentVersions = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyMostRecentVersionsArgs\n {\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n },\n KeepCount = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cleanup policies\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tCleanupPolicyDryRun: pulumi.Bool(false),\n\t\t\tCleanupPolicies: artifactregistry.RepositoryCleanupPolicyArray{\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"delete-untagged\"),\n\t\t\t\t\tAction: pulumi.String(\"DELETE\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"UNTAGGED\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-new-untagged\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"UNTAGGED\"),\n\t\t\t\t\t\tNewerThan: pulumi.String(\"7d\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"delete-prerelease\"),\n\t\t\t\t\tAction: pulumi.String(\"DELETE\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"alpha\"),\n\t\t\t\t\t\t\tpulumi.String(\"v0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOlderThan: pulumi.String(\"30d\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-tagged-release\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"release\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-minimum-versions\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tMostRecentVersions: \u0026artifactregistry.RepositoryCleanupPolicyMostRecentVersionsArgs{\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t\tpulumi.String(\"sandbox\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKeepCount: pulumi.Int(5),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyConditionArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyMostRecentVersionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cleanup policies\")\n .format(\"DOCKER\")\n .cleanupPolicyDryRun(false)\n .cleanupPolicies( \n RepositoryCleanupPolicyArgs.builder()\n .id(\"delete-untagged\")\n .action(\"DELETE\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"UNTAGGED\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-new-untagged\")\n .action(\"KEEP\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"UNTAGGED\")\n .newerThan(\"7d\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"delete-prerelease\")\n .action(\"DELETE\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes( \n \"alpha\",\n \"v0\")\n .olderThan(\"30d\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-tagged-release\")\n .action(\"KEEP\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes(\"release\")\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-minimum-versions\")\n .action(\"KEEP\")\n .mostRecentVersions(RepositoryCleanupPolicyMostRecentVersionsArgs.builder()\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\",\n \"sandbox\")\n .keepCount(5)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cleanup policies\n format: DOCKER\n cleanupPolicyDryRun: false\n cleanupPolicies:\n - id: delete-untagged\n action: DELETE\n condition:\n tagState: UNTAGGED\n - id: keep-new-untagged\n action: KEEP\n condition:\n tagState: UNTAGGED\n newerThan: 7d\n - id: delete-prerelease\n action: DELETE\n condition:\n tagState: TAGGED\n tagPrefixes:\n - alpha\n - v0\n olderThan: 30d\n - id: keep-tagged-release\n action: KEEP\n condition:\n tagState: TAGGED\n tagPrefixes:\n - release\n packageNamePrefixes:\n - webapp\n - mobile\n - id: keep-minimum-versions\n action: KEEP\n mostRecentVersions:\n packageNamePrefixes:\n - webapp\n - mobile\n - sandbox\n keepCount: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Dockerhub Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-dockerhub-remote\",\n description: \"example remote dockerhub repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub with custom credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-dockerhub-remote\",\n description=\"example remote dockerhub repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub with custom credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-dockerhub-remote\",\n Description = \"example remote dockerhub repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub with custom credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-dockerhub-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote dockerhub repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub with custom credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-dockerhub-remote\")\n .description(\"example remote dockerhub repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub with custom credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-dockerhub-remote\n description: example remote dockerhub repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub with custom credentials\n disableUpstreamValidation: true\n dockerRepository:\n publicRepository: DOCKER_HUB\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Docker Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom docker remote with credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n customRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom docker remote with credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom docker remote with credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom docker remote with credentials\n disableUpstreamValidation: true\n dockerRepository:\n customRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Maven Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-maven-custom-remote\",\n description: \"example remote custom maven repository with credentials\",\n format: \"MAVEN\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom maven remote with credentials\",\n disableUpstreamValidation: true,\n mavenRepository: {\n customRepository: {\n uri: \"https://my.maven.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-maven-custom-remote\",\n description=\"example remote custom maven repository with credentials\",\n format=\"MAVEN\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom maven remote with credentials\",\n \"disable_upstream_validation\": True,\n \"maven_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.maven.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-maven-custom-remote\",\n Description = \"example remote custom maven repository with credentials\",\n Format = \"MAVEN\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom maven remote with credentials\",\n DisableUpstreamValidation = true,\n MavenRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.maven.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-maven-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom maven repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"MAVEN\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom maven remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tMavenRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.maven.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-maven-custom-remote\")\n .description(\"example remote custom maven repository with credentials\")\n .format(\"MAVEN\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom maven remote with credentials\")\n .disableUpstreamValidation(true)\n .mavenRepository(RepositoryRemoteRepositoryConfigMavenRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.maven.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-maven-custom-remote\n description: example remote custom maven repository with credentials\n format: MAVEN\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom maven remote with credentials\n disableUpstreamValidation: true\n mavenRepository:\n customRepository:\n uri: https://my.maven.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Npm Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-npm-custom-remote\",\n description: \"example remote custom npm repository with credentials\",\n format: \"NPM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n npmRepository: {\n customRepository: {\n uri: \"https://my.npm.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-npm-custom-remote\",\n description=\"example remote custom npm repository with credentials\",\n format=\"NPM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"npm_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.npm.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-npm-custom-remote\",\n Description = \"example remote custom npm repository with credentials\",\n Format = \"NPM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n NpmRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.npm.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-npm-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom npm repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"NPM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tNpmRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.npm.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-npm-custom-remote\")\n .description(\"example remote custom npm repository with credentials\")\n .format(\"NPM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .npmRepository(RepositoryRemoteRepositoryConfigNpmRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.npm.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-npm-custom-remote\n description: example remote custom npm repository with credentials\n format: NPM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n npmRepository:\n customRepository:\n uri: https://my.npm.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Python Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-python-custom-remote\",\n description: \"example remote custom python repository with credentials\",\n format: \"PYTHON\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n pythonRepository: {\n customRepository: {\n uri: \"https://my.python.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-python-custom-remote\",\n description=\"example remote custom python repository with credentials\",\n format=\"PYTHON\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"python_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.python.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-python-custom-remote\",\n Description = \"example remote custom python repository with credentials\",\n Format = \"PYTHON\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n PythonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.python.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-python-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom python repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"PYTHON\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tPythonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.python.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-python-custom-remote\")\n .description(\"example remote custom python repository with credentials\")\n .format(\"PYTHON\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .pythonRepository(RepositoryRemoteRepositoryConfigPythonRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.python.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-python-custom-remote\n description: example remote custom python repository with credentials\n format: PYTHON\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n pythonRepository:\n customRepository:\n uri: https://my.python.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository\",\n commonRepository: {\n uri: upstreamRepo.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository\",\n \"common_repository\": {\n \"uri\": upstream_repo.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = upstreamRepo.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: upstreamRepo.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(upstreamRepo.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository\n commonRepository:\n uri: ${upstreamRepo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository by URL\",\n commonRepository: {\n uri: project.then(project =\u003e `https://us-central1-docker.pkg.dev/${project.projectId}/example-upstream-repo`),\n },\n },\n}, {\n dependsOn: [upstreamRepo],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository by URL\",\n \"common_repository\": {\n \"uri\": f\"https://us-central1-docker.pkg.dev/{project.project_id}/example-upstream-repo\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[upstream_repo]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository by URL\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = $\"https://us-central1-docker.pkg.dev/{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}/example-upstream-repo\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n upstreamRepo,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository by URL\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.Sprintf(\"https://us-central1-docker.pkg.dev/%v/example-upstream-repo\", project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tupstreamRepo,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository by URL\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(String.format(\"https://us-central1-docker.pkg.dev/%s/example-upstream-repo\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId())))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(upstreamRepo)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository by URL\n commonRepository:\n uri: https://us-central1-docker.pkg.dev/${project.projectId}/example-upstream-repo\n options:\n dependsOn:\n - ${upstreamRepo}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Custom Upstream\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom common docker remote with credentials\",\n disableUpstreamValidation: true,\n commonRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom common docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"common_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom common docker remote with credentials\",\n DisableUpstreamValidation = true,\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom common docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom common docker remote with credentials\")\n .disableUpstreamValidation(true)\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom common docker remote with credentials\n disableUpstreamValidation: true\n commonRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Vulnerability Scanning\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with vulnerability scanning config\",\n format: \"DOCKER\",\n vulnerabilityScanningConfig: {\n enablementConfig: \"INHERITED\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with vulnerability scanning config\",\n format=\"DOCKER\",\n vulnerability_scanning_config={\n \"enablement_config\": \"INHERITED\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with vulnerability scanning config\",\n Format = \"DOCKER\",\n VulnerabilityScanningConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVulnerabilityScanningConfigArgs\n {\n EnablementConfig = \"INHERITED\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with vulnerability scanning config\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tVulnerabilityScanningConfig: \u0026artifactregistry.RepositoryVulnerabilityScanningConfigArgs{\n\t\t\t\tEnablementConfig: pulumi.String(\"INHERITED\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVulnerabilityScanningConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with vulnerability scanning config\")\n .format(\"DOCKER\")\n .vulnerabilityScanningConfig(RepositoryVulnerabilityScanningConfigArgs.builder()\n .enablementConfig(\"INHERITED\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with vulnerability scanning config\n format: DOCKER\n vulnerabilityScanningConfig:\n enablementConfig: INHERITED\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRepository can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}`\n\n* `{{project}}/{{location}}/{{repository_id}}`\n\n* `{{location}}/{{repository_id}}`\n\nWhen using the `pulumi import` command, Repository can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n", "properties": { "cleanupPolicies": { "type": "array", @@ -143972,7 +144517,7 @@ } }, "gcp:bigquery/connection:Connection": { - "description": "A connection allows BigQuery connections to external data sources..\n\n\nTo get more information about Connection, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/bigqueryconnection/rest/v1/projects.locations.connections/create)\n* How-to Guides\n * [Cloud SQL federated queries](https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries)\n\n\n\n## Example Usage\n\n### Bigquery Connection Cloud Resource\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudResource: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_resource={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudResource = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudResource: \u0026bigquery.ConnectionCloudResourceArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudResource()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudResource: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n databaseVersion: \"POSTGRES_11\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: pwd.result,\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n friendlyName: \"👋\",\n description: \"a riveting description\",\n location: \"US\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=pwd.result)\nconnection = gcp.bigquery.Connection(\"connection\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n location=\"US\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n DatabaseVersion = \"POSTGRES_11\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var pwd = new Random.RandomPassword(\"pwd\", new()\n {\n Length = 16,\n Special = false,\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = pwd.Result,\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Location = \"US\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpwd, err := random.NewRandomPassword(ctx, \"pwd\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tSpecial: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .databaseVersion(\"POSTGRES_11\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var pwd = new RandomPassword(\"pwd\", RandomPasswordArgs.builder()\n .length(16)\n .special(false)\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(pwd.result())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .location(\"US\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n databaseVersion: POSTGRES_11\n region: us-central1\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: ${pwd.result}\n connection:\n type: gcp:bigquery:Connection\n properties:\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n location: US\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n databaseVersion: \"POSTGRES_11\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: pwd.result,\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=pwd.result)\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n DatabaseVersion = \"POSTGRES_11\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var pwd = new Random.RandomPassword(\"pwd\", new()\n {\n Length = 16,\n Special = false,\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = pwd.Result,\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpwd, err := random.NewRandomPassword(ctx, \"pwd\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tSpecial: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .databaseVersion(\"POSTGRES_11\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var pwd = new RandomPassword(\"pwd\", RandomPasswordArgs.builder()\n .length(16)\n .special(false)\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(pwd.result())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n databaseVersion: POSTGRES_11\n region: us-central1\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: ${pwd.result}\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Aws\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"aws-us-east-1\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n aws: {\n accessRole: {\n iamRoleId: \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"aws-us-east-1\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n aws={\n \"access_role\": {\n \"iam_role_id\": \"arn:aws:iam::999999999999:role/omnirole\",\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 connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"aws-us-east-1\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Aws = new Gcp.BigQuery.Inputs.ConnectionAwsArgs\n {\n AccessRole = new Gcp.BigQuery.Inputs.ConnectionAwsAccessRoleArgs\n {\n IamRoleId = \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"aws-us-east-1\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tAws: \u0026bigquery.ConnectionAwsArgs{\n\t\t\t\tAccessRole: \u0026bigquery.ConnectionAwsAccessRoleArgs{\n\t\t\t\t\tIamRoleId: pulumi.String(\"arn:aws:iam::999999999999:role/omnirole\"),\n\t\t\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.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAwsArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAwsAccessRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"aws-us-east-1\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .aws(ConnectionAwsArgs.builder()\n .accessRole(ConnectionAwsAccessRoleArgs.builder()\n .iamRoleId(\"arn:aws:iam::999999999999:role/omnirole\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: aws-us-east-1\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n aws:\n accessRole:\n iamRoleId: arn:aws:iam::999999999999:role/omnirole\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Azure\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"azure-eastus2\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n azure: {\n customerTenantId: \"customer-tenant-id\",\n federatedApplicationClientId: \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"azure-eastus2\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n azure={\n \"customer_tenant_id\": \"customer-tenant-id\",\n \"federated_application_client_id\": \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"azure-eastus2\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Azure = new Gcp.BigQuery.Inputs.ConnectionAzureArgs\n {\n CustomerTenantId = \"customer-tenant-id\",\n FederatedApplicationClientId = \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"azure-eastus2\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tAzure: \u0026bigquery.ConnectionAzureArgs{\n\t\t\t\tCustomerTenantId: pulumi.String(\"customer-tenant-id\"),\n\t\t\t\tFederatedApplicationClientId: pulumi.String(\"b43eeeee-eeee-eeee-eeee-a480155501ce\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAzureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"azure-eastus2\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .azure(ConnectionAzureArgs.builder()\n .customerTenantId(\"customer-tenant-id\")\n .federatedApplicationClientId(\"b43eeeee-eeee-eeee-eeee-a480155501ce\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: azure-eastus2\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n azure:\n customerTenantId: customer-tenant-id\n federatedApplicationClientId: b43eeeee-eeee-eeee-eeee-a480155501ce\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Cloudspanner\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n databaseRole: \"database_role\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_spanner={\n \"database\": \"projects/project/instances/instance/databases/database\",\n \"database_role\": \"database_role\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n DatabaseRole = \"database_role\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t\tDatabaseRole: pulumi.String(\"database_role\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSpannerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .databaseRole(\"database_role\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n databaseRole: database_role\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Cloudspanner Databoost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n useParallelism: true,\n useDataBoost: true,\n maxParallelism: 100,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_spanner={\n \"database\": \"projects/project/instances/instance/databases/database\",\n \"use_parallelism\": True,\n \"use_data_boost\": True,\n \"max_parallelism\": 100,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n UseParallelism = true,\n UseDataBoost = true,\n MaxParallelism = 100,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t\tUseParallelism: pulumi.Bool(true),\n\t\t\t\tUseDataBoost: pulumi.Bool(true),\n\t\t\t\tMaxParallelism: pulumi.Int(100),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSpannerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .useParallelism(true)\n .useDataBoost(true)\n .maxParallelism(100)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n useParallelism: true\n useDataBoost: true\n maxParallelism: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Spark\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.dataproc.Cluster(\"basic\", {\n name: \"my-connection\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n },\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n },\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n spark: {\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"my-connection\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n },\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n })\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n spark={\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"my-connection\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n },\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n },\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Spark = new Gcp.BigQuery.Inputs.ConnectionSparkArgs\n {\n SparkHistoryServerConfig = new Gcp.BigQuery.Inputs.ConnectionSparkSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-connection\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{\n\t\t\t\tSparkHistoryServerConfig: \u0026bigquery.ConnectionSparkSparkHistoryServerConfigArgs{\n\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkSparkHistoryServerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Cluster(\"basic\", ClusterArgs.builder()\n .name(\"my-connection\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.of(\"dataproc:dataproc.allow.zero.workers\", \"true\"))\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .build())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .spark(ConnectionSparkArgs.builder()\n .sparkHistoryServerConfig(ConnectionSparkSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n spark:\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: my-connection\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Sql With Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n region: \"us-central1\",\n databaseVersion: \"POSTGRES_11\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: \"tf-test-my-password_77884\",\n});\nconst bqSa = gcp.bigquery.getDefaultServiceAccount({});\nconst keySaUser = new gcp.kms.CryptoKeyIAMMember(\"key_sa_user\", {\n cryptoKeyId: \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: bqSa.then(bqSa =\u003e `serviceAccount:${bqSa.email}`),\n});\nconst bq_connection_cmek = new gcp.bigquery.Connection(\"bq-connection-cmek\", {\n friendlyName: \"👋\",\n description: \"a riveting description\",\n location: \"US\",\n kmsKeyName: \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n}, {\n dependsOn: [keySaUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n region=\"us-central1\",\n database_version=\"POSTGRES_11\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=\"tf-test-my-password_77884\")\nbq_sa = gcp.bigquery.get_default_service_account()\nkey_sa_user = gcp.kms.CryptoKeyIAMMember(\"key_sa_user\",\n crypto_key_id=\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:{bq_sa.email}\")\nbq_connection_cmek = gcp.bigquery.Connection(\"bq-connection-cmek\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n location=\"US\",\n kms_key_name=\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[key_sa_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n Region = \"us-central1\",\n DatabaseVersion = \"POSTGRES_11\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = \"tf-test-my-password_77884\",\n });\n\n var bqSa = Gcp.BigQuery.GetDefaultServiceAccount.Invoke();\n\n var keySaUser = new Gcp.Kms.CryptoKeyIAMMember(\"key_sa_user\", new()\n {\n CryptoKeyId = \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:{bqSa.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)}\",\n });\n\n var bq_connection_cmek = new Gcp.BigQuery.Connection(\"bq-connection-cmek\", new()\n {\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Location = \"US\",\n KmsKeyName = \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n keySaUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pulumi.String(\"tf-test-my-password_77884\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqSa, err := bigquery.GetDefaultServiceAccount(ctx, \u0026bigquery.GetDefaultServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeySaUser, err := kms.NewCryptoKeyIAMMember(ctx, \"key_sa_user\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v\", bqSa.Email),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"bq-connection-cmek\", \u0026bigquery.ConnectionArgs{\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tKmsKeyName: pulumi.String(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeySaUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.BigqueryFunctions;\nimport com.pulumi.gcp.bigquery.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\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 instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .region(\"us-central1\")\n .databaseVersion(\"POSTGRES_11\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(\"tf-test-my-password_77884\")\n .build());\n\n final var bqSa = BigqueryFunctions.getDefaultServiceAccount();\n\n var keySaUser = new CryptoKeyIAMMember(\"keySaUser\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:%s\", bqSa.applyValue(getDefaultServiceAccountResult -\u003e getDefaultServiceAccountResult.email())))\n .build());\n\n var bq_connection_cmek = new Connection(\"bq-connection-cmek\", ConnectionArgs.builder()\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .location(\"US\")\n .kmsKeyName(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(keySaUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n region: us-central1\n databaseVersion: POSTGRES_11\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: tf-test-my-password_77884\n keySaUser:\n type: gcp:kms:CryptoKeyIAMMember\n name: key_sa_user\n properties:\n cryptoKeyId: projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:${bqSa.email}\n bq-connection-cmek:\n type: gcp:bigquery:Connection\n properties:\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n location: US\n kmsKeyName: projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n options:\n dependsOn:\n - ${keySaUser}\nvariables:\n bqSa:\n fn::invoke:\n function: gcp:bigquery:getDefaultServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConnection can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/connections/{{connection_id}}`\n\n* `{{project}}/{{location}}/{{connection_id}}`\n\n* `{{location}}/{{connection_id}}`\n\nWhen using the `pulumi import` command, Connection can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{connection_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default {{project}}/{{location}}/{{connection_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default {{location}}/{{connection_id}}\n```\n\n", + "description": "A connection allows BigQuery connections to external data sources..\n\n\nTo get more information about Connection, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/bigqueryconnection/rest/v1/projects.locations.connections/create)\n* How-to Guides\n * [Cloud SQL federated queries](https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries)\n\n\n\n## Example Usage\n\n### Bigquery Connection Cloud Resource\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudResource: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_resource={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudResource = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudResource: \u0026bigquery.ConnectionCloudResourceArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudResource()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudResource: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n databaseVersion: \"POSTGRES_11\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: pwd.result,\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n friendlyName: \"👋\",\n description: \"a riveting description\",\n location: \"US\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=pwd.result)\nconnection = gcp.bigquery.Connection(\"connection\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n location=\"US\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n DatabaseVersion = \"POSTGRES_11\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var pwd = new Random.RandomPassword(\"pwd\", new()\n {\n Length = 16,\n Special = false,\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = pwd.Result,\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Location = \"US\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpwd, err := random.NewRandomPassword(ctx, \"pwd\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tSpecial: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .databaseVersion(\"POSTGRES_11\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var pwd = new RandomPassword(\"pwd\", RandomPasswordArgs.builder()\n .length(16)\n .special(false)\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(pwd.result())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .location(\"US\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n databaseVersion: POSTGRES_11\n region: us-central1\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: ${pwd.result}\n connection:\n type: gcp:bigquery:Connection\n properties:\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n location: US\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n databaseVersion: \"POSTGRES_11\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: pwd.result,\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=pwd.result)\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n DatabaseVersion = \"POSTGRES_11\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var pwd = new Random.RandomPassword(\"pwd\", new()\n {\n Length = 16,\n Special = false,\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = pwd.Result,\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpwd, err := random.NewRandomPassword(ctx, \"pwd\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tSpecial: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .databaseVersion(\"POSTGRES_11\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var pwd = new RandomPassword(\"pwd\", RandomPasswordArgs.builder()\n .length(16)\n .special(false)\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(pwd.result())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n databaseVersion: POSTGRES_11\n region: us-central1\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: ${pwd.result}\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Aws\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"aws-us-east-1\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n aws: {\n accessRole: {\n iamRoleId: \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"aws-us-east-1\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n aws={\n \"access_role\": {\n \"iam_role_id\": \"arn:aws:iam::999999999999:role/omnirole\",\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 connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"aws-us-east-1\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Aws = new Gcp.BigQuery.Inputs.ConnectionAwsArgs\n {\n AccessRole = new Gcp.BigQuery.Inputs.ConnectionAwsAccessRoleArgs\n {\n IamRoleId = \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"aws-us-east-1\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tAws: \u0026bigquery.ConnectionAwsArgs{\n\t\t\t\tAccessRole: \u0026bigquery.ConnectionAwsAccessRoleArgs{\n\t\t\t\t\tIamRoleId: pulumi.String(\"arn:aws:iam::999999999999:role/omnirole\"),\n\t\t\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.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAwsArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAwsAccessRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"aws-us-east-1\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .aws(ConnectionAwsArgs.builder()\n .accessRole(ConnectionAwsAccessRoleArgs.builder()\n .iamRoleId(\"arn:aws:iam::999999999999:role/omnirole\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: aws-us-east-1\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n aws:\n accessRole:\n iamRoleId: arn:aws:iam::999999999999:role/omnirole\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Azure\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"azure-eastus2\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n azure: {\n customerTenantId: \"customer-tenant-id\",\n federatedApplicationClientId: \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"azure-eastus2\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n azure={\n \"customer_tenant_id\": \"customer-tenant-id\",\n \"federated_application_client_id\": \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"azure-eastus2\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Azure = new Gcp.BigQuery.Inputs.ConnectionAzureArgs\n {\n CustomerTenantId = \"customer-tenant-id\",\n FederatedApplicationClientId = \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"azure-eastus2\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tAzure: \u0026bigquery.ConnectionAzureArgs{\n\t\t\t\tCustomerTenantId: pulumi.String(\"customer-tenant-id\"),\n\t\t\t\tFederatedApplicationClientId: pulumi.String(\"b43eeeee-eeee-eeee-eeee-a480155501ce\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionAzureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"azure-eastus2\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .azure(ConnectionAzureArgs.builder()\n .customerTenantId(\"customer-tenant-id\")\n .federatedApplicationClientId(\"b43eeeee-eeee-eeee-eeee-a480155501ce\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: azure-eastus2\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n azure:\n customerTenantId: customer-tenant-id\n federatedApplicationClientId: b43eeeee-eeee-eeee-eeee-a480155501ce\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Cloudspanner\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n databaseRole: \"database_role\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_spanner={\n \"database\": \"projects/project/instances/instance/databases/database\",\n \"database_role\": \"database_role\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n DatabaseRole = \"database_role\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t\tDatabaseRole: pulumi.String(\"database_role\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSpannerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .databaseRole(\"database_role\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n databaseRole: database_role\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Cloudspanner Databoost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n useParallelism: true,\n useDataBoost: true,\n maxParallelism: 100,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n cloud_spanner={\n \"database\": \"projects/project/instances/instance/databases/database\",\n \"use_parallelism\": True,\n \"use_data_boost\": True,\n \"max_parallelism\": 100,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n UseParallelism = true,\n UseDataBoost = true,\n MaxParallelism = 100,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t\tUseParallelism: pulumi.Bool(true),\n\t\t\t\tUseDataBoost: pulumi.Bool(true),\n\t\t\t\tMaxParallelism: pulumi.Int(100),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSpannerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .useParallelism(true)\n .useDataBoost(true)\n .maxParallelism(100)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n useParallelism: true\n useDataBoost: true\n maxParallelism: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Spark\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.dataproc.Cluster(\"basic\", {\n name: \"my-connection\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n },\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n },\n});\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n connectionId: \"my-connection\",\n location: \"US\",\n friendlyName: \"👋\",\n description: \"a riveting description\",\n spark: {\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"my-connection\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n },\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n })\nconnection = gcp.bigquery.Connection(\"connection\",\n connection_id=\"my-connection\",\n location=\"US\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n spark={\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"my-connection\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n },\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n },\n });\n\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n ConnectionId = \"my-connection\",\n Location = \"US\",\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Spark = new Gcp.BigQuery.Inputs.ConnectionSparkArgs\n {\n SparkHistoryServerConfig = new Gcp.BigQuery.Inputs.ConnectionSparkSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-connection\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"connection\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{\n\t\t\t\tSparkHistoryServerConfig: \u0026bigquery.ConnectionSparkSparkHistoryServerConfigArgs{\n\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkSparkHistoryServerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Cluster(\"basic\", ClusterArgs.builder()\n .name(\"my-connection\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.of(\"dataproc:dataproc.allow.zero.workers\", \"true\"))\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .build())\n .build());\n\n var connection = new Connection(\"connection\", ConnectionArgs.builder()\n .connectionId(\"my-connection\")\n .location(\"US\")\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .spark(ConnectionSparkArgs.builder()\n .sparkHistoryServerConfig(ConnectionSparkSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n connectionId: my-connection\n location: US\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n spark:\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: my-connection\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Connection Sql With Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"my-database-instance\",\n region: \"us-central1\",\n databaseVersion: \"POSTGRES_11\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {\n instance: instance.name,\n name: \"db\",\n});\nconst user = new gcp.sql.User(\"user\", {\n name: \"user\",\n instance: instance.name,\n password: \"tf-test-my-password_15222\",\n});\nconst bqSa = gcp.bigquery.getDefaultServiceAccount({});\nconst keySaUser = new gcp.kms.CryptoKeyIAMMember(\"key_sa_user\", {\n cryptoKeyId: \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: bqSa.then(bqSa =\u003e `serviceAccount:${bqSa.email}`),\n});\nconst bq_connection_cmek = new gcp.bigquery.Connection(\"bq-connection-cmek\", {\n friendlyName: \"👋\",\n description: \"a riveting description\",\n location: \"US\",\n kmsKeyName: \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n cloudSql: {\n instanceId: instance.connectionName,\n database: db.name,\n type: \"POSTGRES\",\n credential: {\n username: user.name,\n password: user.password,\n },\n },\n}, {\n dependsOn: [keySaUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"my-database-instance\",\n region=\"us-central1\",\n database_version=\"POSTGRES_11\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\",\n instance=instance.name,\n name=\"db\")\nuser = gcp.sql.User(\"user\",\n name=\"user\",\n instance=instance.name,\n password=\"tf-test-my-password_15222\")\nbq_sa = gcp.bigquery.get_default_service_account()\nkey_sa_user = gcp.kms.CryptoKeyIAMMember(\"key_sa_user\",\n crypto_key_id=\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:{bq_sa.email}\")\nbq_connection_cmek = gcp.bigquery.Connection(\"bq-connection-cmek\",\n friendly_name=\"👋\",\n description=\"a riveting description\",\n location=\"US\",\n kms_key_name=\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n cloud_sql={\n \"instance_id\": instance.connection_name,\n \"database\": db.name,\n \"type\": \"POSTGRES\",\n \"credential\": {\n \"username\": user.name,\n \"password\": user.password,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[key_sa_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"my-database-instance\",\n Region = \"us-central1\",\n DatabaseVersion = \"POSTGRES_11\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\n Name = \"db\",\n });\n\n var user = new Gcp.Sql.User(\"user\", new()\n {\n Name = \"user\",\n Instance = instance.Name,\n Password = \"tf-test-my-password_15222\",\n });\n\n var bqSa = Gcp.BigQuery.GetDefaultServiceAccount.Invoke();\n\n var keySaUser = new Gcp.Kms.CryptoKeyIAMMember(\"key_sa_user\", new()\n {\n CryptoKeyId = \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:{bqSa.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)}\",\n });\n\n var bq_connection_cmek = new Gcp.BigQuery.Connection(\"bq-connection-cmek\", new()\n {\n FriendlyName = \"👋\",\n Description = \"a riveting description\",\n Location = \"US\",\n KmsKeyName = \"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\",\n CloudSql = new Gcp.BigQuery.Inputs.ConnectionCloudSqlArgs\n {\n InstanceId = instance.ConnectionName,\n Database = db.Name,\n Type = \"POSTGRES\",\n Credential = new Gcp.BigQuery.Inputs.ConnectionCloudSqlCredentialArgs\n {\n Username = user.Name,\n Password = user.Password,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n keySaUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database-instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_11\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdb, err := sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\n\t\t\tName: pulumi.String(\"db\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := sql.NewUser(ctx, \"user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"user\"),\n\t\t\tInstance: instance.Name,\n\t\t\tPassword: pulumi.String(\"tf-test-my-password_15222\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqSa, err := bigquery.GetDefaultServiceAccount(ctx, \u0026bigquery.GetDefaultServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeySaUser, err := kms.NewCryptoKeyIAMMember(ctx, \"key_sa_user\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v\", bqSa.Email),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewConnection(ctx, \"bq-connection-cmek\", \u0026bigquery.ConnectionArgs{\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tKmsKeyName: pulumi.String(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\"),\n\t\t\tCloudSql: \u0026bigquery.ConnectionCloudSqlArgs{\n\t\t\t\tInstanceId: instance.ConnectionName,\n\t\t\t\tDatabase: db.Name,\n\t\t\t\tType: pulumi.String(\"POSTGRES\"),\n\t\t\t\tCredential: \u0026bigquery.ConnectionCloudSqlCredentialArgs{\n\t\t\t\t\tUsername: user.Name,\n\t\t\t\t\tPassword: user.Password,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeySaUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.Database;\nimport com.pulumi.gcp.sql.DatabaseArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.bigquery.BigqueryFunctions;\nimport com.pulumi.gcp.bigquery.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs;\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 instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"my-database-instance\")\n .region(\"us-central1\")\n .databaseVersion(\"POSTGRES_11\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder()\n .instance(instance.name())\n .name(\"db\")\n .build());\n\n var user = new User(\"user\", UserArgs.builder()\n .name(\"user\")\n .instance(instance.name())\n .password(\"tf-test-my-password_15222\")\n .build());\n\n final var bqSa = BigqueryFunctions.getDefaultServiceAccount();\n\n var keySaUser = new CryptoKeyIAMMember(\"keySaUser\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:%s\", bqSa.applyValue(getDefaultServiceAccountResult -\u003e getDefaultServiceAccountResult.email())))\n .build());\n\n var bq_connection_cmek = new Connection(\"bq-connection-cmek\", ConnectionArgs.builder()\n .friendlyName(\"👋\")\n .description(\"a riveting description\")\n .location(\"US\")\n .kmsKeyName(\"projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\")\n .cloudSql(ConnectionCloudSqlArgs.builder()\n .instanceId(instance.connectionName())\n .database(db.name())\n .type(\"POSTGRES\")\n .credential(ConnectionCloudSqlCredentialArgs.builder()\n .username(user.name())\n .password(user.password())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(keySaUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database-instance\n region: us-central1\n databaseVersion: POSTGRES_11\n settings:\n tier: db-f1-micro\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n name: db\n user:\n type: gcp:sql:User\n properties:\n name: user\n instance: ${instance.name}\n password: tf-test-my-password_15222\n keySaUser:\n type: gcp:kms:CryptoKeyIAMMember\n name: key_sa_user\n properties:\n cryptoKeyId: projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:${bqSa.email}\n bq-connection-cmek:\n type: gcp:bigquery:Connection\n properties:\n friendlyName: \"\\U0001F44B\"\n description: a riveting description\n location: US\n kmsKeyName: projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key\n cloudSql:\n instanceId: ${instance.connectionName}\n database: ${db.name}\n type: POSTGRES\n credential:\n username: ${user.name}\n password: ${user.password}\n options:\n dependsOn:\n - ${keySaUser}\nvariables:\n bqSa:\n fn::invoke:\n function: gcp:bigquery:getDefaultServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConnection can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/connections/{{connection_id}}`\n\n* `{{project}}/{{location}}/{{connection_id}}`\n\n* `{{location}}/{{connection_id}}`\n\nWhen using the `pulumi import` command, Connection can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{connection_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default {{project}}/{{location}}/{{connection_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/connection:Connection default {{location}}/{{connection_id}}\n```\n\n", "properties": { "aws": { "$ref": "#/types/gcp:bigquery/ConnectionAws:ConnectionAws", @@ -146294,7 +146839,7 @@ } }, "gcp:bigquery/routine:Routine": { - "description": "A user-defined function or a stored procedure that belongs to a Dataset\n\n\nTo get more information about Routine, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/rest/v2/routines)\n* How-to Guides\n * [Routines Intro](https://cloud.google.com/bigquery/docs/reference/rest/v2/routines)\n\n## Example Usage\n\n### Bigquery Routine Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"SQL\",\n definitionBody: \"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"SQL\",\n definition_body=\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"SQL\",\n DefinitionBody = \"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"SQL\")\n .definitionBody(\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: SQL\n definitionBody: CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Json\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"SCALAR_FUNCTION\",\n language: \"JAVASCRIPT\",\n definitionBody: \"CREATE FUNCTION multiplyInputs return x*y;\",\n arguments: [\n {\n name: \"x\",\n dataType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n {\n name: \"y\",\n dataType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n ],\n returnType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"SCALAR_FUNCTION\",\n language=\"JAVASCRIPT\",\n definition_body=\"CREATE FUNCTION multiplyInputs return x*y;\",\n arguments=[\n {\n \"name\": \"x\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n {\n \"name\": \"y\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n ],\n return_type=\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"SCALAR_FUNCTION\",\n Language = \"JAVASCRIPT\",\n DefinitionBody = \"CREATE FUNCTION multiplyInputs return x*y;\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"x\",\n DataType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"y\",\n DataType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n },\n ReturnType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"JAVASCRIPT\"),\n\t\t\tDefinitionBody: pulumi.String(\"CREATE FUNCTION multiplyInputs return x*y;\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"x\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"y\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"SCALAR_FUNCTION\")\n .language(\"JAVASCRIPT\")\n .definitionBody(\"CREATE FUNCTION multiplyInputs return x*y;\")\n .arguments( \n RoutineArgumentArgs.builder()\n .name(\"x\")\n .dataType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build(),\n RoutineArgumentArgs.builder()\n .name(\"y\")\n .dataType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build())\n .returnType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: SCALAR_FUNCTION\n language: JAVASCRIPT\n definitionBody: CREATE FUNCTION multiplyInputs return x*y;\n arguments:\n - name: x\n dataType: '{\"typeKind\" : \"FLOAT64\"}'\n - name: y\n dataType: '{\"typeKind\" : \"FLOAT64\"}'\n returnType: '{\"typeKind\" : \"FLOAT64\"}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Tvf\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"TABLE_VALUED_FUNCTION\",\n language: \"SQL\",\n definitionBody: \"SELECT 1 + value AS value\\n\",\n arguments: [{\n name: \"value\",\n argumentKind: \"FIXED_TYPE\",\n dataType: JSON.stringify({\n typeKind: \"INT64\",\n }),\n }],\n returnTableType: JSON.stringify({\n columns: [{\n name: \"value\",\n type: {\n typeKind: \"INT64\",\n },\n }],\n }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"TABLE_VALUED_FUNCTION\",\n language=\"SQL\",\n definition_body=\"SELECT 1 + value AS value\\n\",\n arguments=[{\n \"name\": \"value\",\n \"argument_kind\": \"FIXED_TYPE\",\n \"data_type\": json.dumps({\n \"typeKind\": \"INT64\",\n }),\n }],\n return_table_type=json.dumps({\n \"columns\": [{\n \"name\": \"value\",\n \"type\": {\n \"typeKind\": \"INT64\",\n },\n }],\n }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"TABLE_VALUED_FUNCTION\",\n Language = \"SQL\",\n DefinitionBody = @\"SELECT 1 + value AS value\n\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"value\",\n ArgumentKind = \"FIXED_TYPE\",\n DataType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n }),\n },\n },\n ReturnTableType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"columns\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"value\",\n [\"type\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n },\n },\n },\n }),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"typeKind\": \"INT64\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"columns\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\"type\": map[string]interface{}{\n\t\t\t\t\t\t\"typeKind\": \"INT64\",\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\tjson1 := string(tmpJSON1)\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"TABLE_VALUED_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"SELECT 1 + value AS value\\n\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"value\"),\n\t\t\t\t\tArgumentKind: pulumi.String(\"FIXED_TYPE\"),\n\t\t\t\t\tDataType: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnTableType: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"TABLE_VALUED_FUNCTION\")\n .language(\"SQL\")\n .definitionBody(\"\"\"\nSELECT 1 + value AS value\n \"\"\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"value\")\n .argumentKind(\"FIXED_TYPE\")\n .dataType(serializeJson(\n jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n )))\n .build())\n .returnTableType(serializeJson(\n jsonObject(\n jsonProperty(\"columns\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"value\"),\n jsonProperty(\"type\", jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n ))\n )))\n )))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: TABLE_VALUED_FUNCTION\n language: SQL\n definitionBody: |\n SELECT 1 + value AS value\n arguments:\n - name: value\n argumentKind: FIXED_TYPE\n dataType:\n fn::toJSON:\n typeKind: INT64\n returnTableType:\n fn::toJSON:\n columns:\n - name: value\n type:\n typeKind: INT64\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst pyspark = new gcp.bigquery.Routine(\"pyspark\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"PYTHON\",\n definitionBody: `from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\\\n .option(\"writeMethod\", \"direct\") \\\\\n .save(\"wordcount_dataset.wordcount_output\")\n`,\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\npyspark = gcp.bigquery.Routine(\"pyspark\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"PYTHON\",\n definition_body=\"\"\"from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n\"\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var pyspark = new Gcp.BigQuery.Routine(\"pyspark\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"PYTHON\",\n DefinitionBody = @\"from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"\"spark-bigquery-demo\"\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"\"bigquery\"\") \\\n .option(\"\"table\"\", \"\"bigquery-public-data:samples.shakespeare\"\") \\\n .load()\nwords.createOrReplaceTempView(\"\"words\"\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"\"sum(word_count)\"\", \"\"sum_word_count\"\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"\"bigquery\"\") \\\n .option(\"\"writeMethod\"\", \"\"direct\"\") \\\n .save(\"\"wordcount_dataset.wordcount_output\"\")\n\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"pyspark\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"PYTHON\"),\n\t\t\tDefinitionBody: pulumi.String(`from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n`),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var pyspark = new Routine(\"pyspark\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"PYTHON\")\n .definitionBody(\"\"\"\nfrom pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n \"\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n pyspark:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: PYTHON\n definitionBody: \"from pyspark.sql import SparkSession\\n\\nspark = SparkSession.builder.appName(\\\"spark-bigquery-demo\\\").getOrCreate()\\n \\n# Load data from BigQuery.\\nwords = spark.read.format(\\\"bigquery\\\") \\\\\\n .option(\\\"table\\\", \\\"bigquery-public-data:samples.shakespeare\\\") \\\\\\n .load()\\nwords.createOrReplaceTempView(\\\"words\\\")\\n \\n# Perform word count.\\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\\\"sum(word_count)\\\", \\\"sum_word_count\\\")\\nword_count.show()\\nword_count.printSchema()\\n \\n# Saving the data to BigQuery\\nword_count.write.format(\\\"bigquery\\\") \\\\\\n .option(\\\"writeMethod\\\", \\\"direct\\\") \\\\\\n .save(\\\"wordcount_dataset.wordcount_output\\\")\\n\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Pyspark Mainfile\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst pysparkMainfile = new gcp.bigquery.Routine(\"pyspark_mainfile\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"PYTHON\",\n definitionBody: \"\",\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n mainFileUri: \"gs://test-bucket/main.py\",\n pyFileUris: [\"gs://test-bucket/lib.py\"],\n fileUris: [\"gs://test-bucket/distribute_in_executor.json\"],\n archiveUris: [\"gs://test-bucket/distribute_in_executor.tar.gz\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\npyspark_mainfile = gcp.bigquery.Routine(\"pyspark_mainfile\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"PYTHON\",\n definition_body=\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n \"main_file_uri\": \"gs://test-bucket/main.py\",\n \"py_file_uris\": [\"gs://test-bucket/lib.py\"],\n \"file_uris\": [\"gs://test-bucket/distribute_in_executor.json\"],\n \"archive_uris\": [\"gs://test-bucket/distribute_in_executor.tar.gz\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var pysparkMainfile = new Gcp.BigQuery.Routine(\"pyspark_mainfile\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"PYTHON\",\n DefinitionBody = \"\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n MainFileUri = \"gs://test-bucket/main.py\",\n PyFileUris = new[]\n {\n \"gs://test-bucket/lib.py\",\n },\n FileUris = new[]\n {\n \"gs://test-bucket/distribute_in_executor.json\",\n },\n ArchiveUris = new[]\n {\n \"gs://test-bucket/distribute_in_executor.tar.gz\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"pyspark_mainfile\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"PYTHON\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t\tMainFileUri: pulumi.String(\"gs://test-bucket/main.py\"),\n\t\t\t\tPyFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/lib.py\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/distribute_in_executor.json\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/distribute_in_executor.tar.gz\"),\n\t\t\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var pysparkMainfile = new Routine(\"pysparkMainfile\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"PYTHON\")\n .definitionBody(\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .mainFileUri(\"gs://test-bucket/main.py\")\n .pyFileUris(\"gs://test-bucket/lib.py\")\n .fileUris(\"gs://test-bucket/distribute_in_executor.json\")\n .archiveUris(\"gs://test-bucket/distribute_in_executor.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n pysparkMainfile:\n type: gcp:bigquery:Routine\n name: pyspark_mainfile\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: PYTHON\n definitionBody: \"\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n mainFileUri: gs://test-bucket/main.py\n pyFileUris:\n - gs://test-bucket/lib.py\n fileUris:\n - gs://test-bucket/distribute_in_executor.json\n archiveUris:\n - gs://test-bucket/distribute_in_executor.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Spark Jar\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst sparkJar = new gcp.bigquery.Routine(\"spark_jar\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"SCALA\",\n definitionBody: \"\",\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n containerImage: \"gcr.io/my-project-id/my-spark-image:latest\",\n mainClass: \"com.google.test.jar.MainClass\",\n jarUris: [\"gs://test-bucket/uberjar_spark_spark3.jar\"],\n properties: {\n \"spark.dataproc.scaling.version\": \"2\",\n \"spark.reducer.fetchMigratedShuffle.enabled\": \"true\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\nspark_jar = gcp.bigquery.Routine(\"spark_jar\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"SCALA\",\n definition_body=\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n \"container_image\": \"gcr.io/my-project-id/my-spark-image:latest\",\n \"main_class\": \"com.google.test.jar.MainClass\",\n \"jar_uris\": [\"gs://test-bucket/uberjar_spark_spark3.jar\"],\n \"properties\": {\n \"spark.dataproc.scaling.version\": \"2\",\n \"spark.reducer.fetchMigratedShuffle.enabled\": \"true\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var sparkJar = new Gcp.BigQuery.Routine(\"spark_jar\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"SCALA\",\n DefinitionBody = \"\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n ContainerImage = \"gcr.io/my-project-id/my-spark-image:latest\",\n MainClass = \"com.google.test.jar.MainClass\",\n JarUris = new[]\n {\n \"gs://test-bucket/uberjar_spark_spark3.jar\",\n },\n Properties = \n {\n { \"spark.dataproc.scaling.version\", \"2\" },\n { \"spark.reducer.fetchMigratedShuffle.enabled\", \"true\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"spark_jar\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"SCALA\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t\tContainerImage: pulumi.String(\"gcr.io/my-project-id/my-spark-image:latest\"),\n\t\t\t\tMainClass: pulumi.String(\"com.google.test.jar.MainClass\"),\n\t\t\t\tJarUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/uberjar_spark_spark3.jar\"),\n\t\t\t\t},\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dataproc.scaling.version\": pulumi.String(\"2\"),\n\t\t\t\t\t\"spark.reducer.fetchMigratedShuffle.enabled\": pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var sparkJar = new Routine(\"sparkJar\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"SCALA\")\n .definitionBody(\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .containerImage(\"gcr.io/my-project-id/my-spark-image:latest\")\n .mainClass(\"com.google.test.jar.MainClass\")\n .jarUris(\"gs://test-bucket/uberjar_spark_spark3.jar\")\n .properties(Map.ofEntries(\n Map.entry(\"spark.dataproc.scaling.version\", \"2\"),\n Map.entry(\"spark.reducer.fetchMigratedShuffle.enabled\", \"true\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n sparkJar:\n type: gcp:bigquery:Routine\n name: spark_jar\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: SCALA\n definitionBody: \"\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n containerImage: gcr.io/my-project-id/my-spark-image:latest\n mainClass: com.google.test.jar.MainClass\n jarUris:\n - gs://test-bucket/uberjar_spark_spark3.jar\n properties:\n spark.dataproc.scaling.version: '2'\n spark.reducer.fetchMigratedShuffle.enabled: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Data Governance Type\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"tf_test_dataset_id_15222\"});\nconst customMaskingRoutine = new gcp.bigquery.Routine(\"custom_masking_routine\", {\n datasetId: test.datasetId,\n routineId: \"custom_masking_routine\",\n routineType: \"SCALAR_FUNCTION\",\n language: \"SQL\",\n dataGovernanceType: \"DATA_MASKING\",\n definitionBody: \"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n arguments: [{\n name: \"ssn\",\n dataType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n }],\n returnType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"tf_test_dataset_id_15222\")\ncustom_masking_routine = gcp.bigquery.Routine(\"custom_masking_routine\",\n dataset_id=test.dataset_id,\n routine_id=\"custom_masking_routine\",\n routine_type=\"SCALAR_FUNCTION\",\n language=\"SQL\",\n data_governance_type=\"DATA_MASKING\",\n definition_body=\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n arguments=[{\n \"name\": \"ssn\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n }],\n return_type=\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"tf_test_dataset_id_15222\",\n });\n\n var customMaskingRoutine = new Gcp.BigQuery.Routine(\"custom_masking_routine\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"custom_masking_routine\",\n RoutineType = \"SCALAR_FUNCTION\",\n Language = \"SQL\",\n DataGovernanceType = \"DATA_MASKING\",\n DefinitionBody = \"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"ssn\",\n DataType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n },\n },\n ReturnType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"tf_test_dataset_id_15222\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"custom_masking_routine\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"custom_masking_routine\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDataGovernanceType: pulumi.String(\"DATA_MASKING\"),\n\t\t\tDefinitionBody: pulumi.String(\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"ssn\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"tf_test_dataset_id_15222\")\n .build());\n\n var customMaskingRoutine = new Routine(\"customMaskingRoutine\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"custom_masking_routine\")\n .routineType(\"SCALAR_FUNCTION\")\n .language(\"SQL\")\n .dataGovernanceType(\"DATA_MASKING\")\n .definitionBody(\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"ssn\")\n .dataType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .build())\n .returnType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: tf_test_dataset_id_15222\n customMaskingRoutine:\n type: gcp:bigquery:Routine\n name: custom_masking_routine\n properties:\n datasetId: ${test.datasetId}\n routineId: custom_masking_routine\n routineType: SCALAR_FUNCTION\n language: SQL\n dataGovernanceType: DATA_MASKING\n definitionBody: SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\n arguments:\n - name: ssn\n dataType: '{\"typeKind\" : \"STRING\"}'\n returnType: '{\"typeKind\" : \"STRING\"}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Remote Function\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n cloudResource: {},\n});\nconst remoteFunction = new gcp.bigquery.Routine(\"remote_function\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"SCALAR_FUNCTION\",\n definitionBody: \"\",\n returnType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n remoteFunctionOptions: {\n endpoint: \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n connection: testConnection.name,\n maxBatchingRows: \"10\",\n userDefinedContext: {\n z: \"1.5\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n cloud_resource={})\nremote_function = gcp.bigquery.Routine(\"remote_function\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"SCALAR_FUNCTION\",\n definition_body=\"\",\n return_type=\"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n remote_function_options={\n \"endpoint\": \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n \"connection\": test_connection.name,\n \"max_batching_rows\": \"10\",\n \"user_defined_context\": {\n \"z\": \"1.5\",\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 test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n CloudResource = null,\n });\n\n var remoteFunction = new Gcp.BigQuery.Routine(\"remote_function\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"SCALAR_FUNCTION\",\n DefinitionBody = \"\",\n ReturnType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n RemoteFunctionOptions = new Gcp.BigQuery.Inputs.RoutineRemoteFunctionOptionsArgs\n {\n Endpoint = \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n Connection = testConnection.Name,\n MaxBatchingRows = \"10\",\n UserDefinedContext = \n {\n { \"z\", \"1.5\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tCloudResource: \u0026bigquery.ConnectionCloudResourceArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"remote_function\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t\tRemoteFunctionOptions: \u0026bigquery.RoutineRemoteFunctionOptionsArgs{\n\t\t\t\tEndpoint: pulumi.String(\"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\"),\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tMaxBatchingRows: pulumi.String(\"10\"),\n\t\t\t\tUserDefinedContext: pulumi.StringMap{\n\t\t\t\t\t\"z\": pulumi.String(\"1.5\"),\n\t\t\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudResourceArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineRemoteFunctionOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .cloudResource()\n .build());\n\n var remoteFunction = new Routine(\"remoteFunction\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"SCALAR_FUNCTION\")\n .definitionBody(\"\")\n .returnType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .remoteFunctionOptions(RoutineRemoteFunctionOptionsArgs.builder()\n .endpoint(\"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\")\n .connection(testConnection.name())\n .maxBatchingRows(\"10\")\n .userDefinedContext(Map.of(\"z\", \"1.5\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n cloudResource: {}\n remoteFunction:\n type: gcp:bigquery:Routine\n name: remote_function\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: SCALAR_FUNCTION\n definitionBody: \"\"\n returnType: '{\"typeKind\" : \"STRING\"}'\n remoteFunctionOptions:\n endpoint: https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\n connection: ${testConnection.name}\n maxBatchingRows: '10'\n userDefinedContext:\n z: '1.5'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRoutine can be imported using any of these accepted formats:\n\n* `projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}`\n\n* `{{project}}/{{dataset_id}}/{{routine_id}}`\n\n* `{{dataset_id}}/{{routine_id}}`\n\nWhen using the `pulumi import` command, Routine can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default {{project}}/{{dataset_id}}/{{routine_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default {{dataset_id}}/{{routine_id}}\n```\n\n", + "description": "A user-defined function or a stored procedure that belongs to a Dataset\n\n\nTo get more information about Routine, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/rest/v2/routines)\n* How-to Guides\n * [Routines Intro](https://cloud.google.com/bigquery/docs/reference/rest/v2/routines)\n\n## Example Usage\n\n### Bigquery Routine Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"SQL\",\n definitionBody: \"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"SQL\",\n definition_body=\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"SQL\",\n DefinitionBody = \"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"SQL\")\n .definitionBody(\"CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: SQL\n definitionBody: CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Json\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"SCALAR_FUNCTION\",\n language: \"JAVASCRIPT\",\n definitionBody: \"CREATE FUNCTION multiplyInputs return x*y;\",\n arguments: [\n {\n name: \"x\",\n dataType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n {\n name: \"y\",\n dataType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n ],\n returnType: \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"SCALAR_FUNCTION\",\n language=\"JAVASCRIPT\",\n definition_body=\"CREATE FUNCTION multiplyInputs return x*y;\",\n arguments=[\n {\n \"name\": \"x\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n {\n \"name\": \"y\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n ],\n return_type=\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"SCALAR_FUNCTION\",\n Language = \"JAVASCRIPT\",\n DefinitionBody = \"CREATE FUNCTION multiplyInputs return x*y;\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"x\",\n DataType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"y\",\n DataType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n },\n },\n ReturnType = \"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"JAVASCRIPT\"),\n\t\t\tDefinitionBody: pulumi.String(\"CREATE FUNCTION multiplyInputs return x*y;\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"x\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"y\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"SCALAR_FUNCTION\")\n .language(\"JAVASCRIPT\")\n .definitionBody(\"CREATE FUNCTION multiplyInputs return x*y;\")\n .arguments( \n RoutineArgumentArgs.builder()\n .name(\"x\")\n .dataType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build(),\n RoutineArgumentArgs.builder()\n .name(\"y\")\n .dataType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build())\n .returnType(\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: SCALAR_FUNCTION\n language: JAVASCRIPT\n definitionBody: CREATE FUNCTION multiplyInputs return x*y;\n arguments:\n - name: x\n dataType: '{\"typeKind\" : \"FLOAT64\"}'\n - name: y\n dataType: '{\"typeKind\" : \"FLOAT64\"}'\n returnType: '{\"typeKind\" : \"FLOAT64\"}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Tvf\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst sproc = new gcp.bigquery.Routine(\"sproc\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"TABLE_VALUED_FUNCTION\",\n language: \"SQL\",\n definitionBody: \"SELECT 1 + value AS value\\n\",\n arguments: [{\n name: \"value\",\n argumentKind: \"FIXED_TYPE\",\n dataType: JSON.stringify({\n typeKind: \"INT64\",\n }),\n }],\n returnTableType: JSON.stringify({\n columns: [{\n name: \"value\",\n type: {\n typeKind: \"INT64\",\n },\n }],\n }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\nsproc = gcp.bigquery.Routine(\"sproc\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"TABLE_VALUED_FUNCTION\",\n language=\"SQL\",\n definition_body=\"SELECT 1 + value AS value\\n\",\n arguments=[{\n \"name\": \"value\",\n \"argument_kind\": \"FIXED_TYPE\",\n \"data_type\": json.dumps({\n \"typeKind\": \"INT64\",\n }),\n }],\n return_table_type=json.dumps({\n \"columns\": [{\n \"name\": \"value\",\n \"type\": {\n \"typeKind\": \"INT64\",\n },\n }],\n }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var sproc = new Gcp.BigQuery.Routine(\"sproc\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"TABLE_VALUED_FUNCTION\",\n Language = \"SQL\",\n DefinitionBody = @\"SELECT 1 + value AS value\n\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"value\",\n ArgumentKind = \"FIXED_TYPE\",\n DataType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n }),\n },\n },\n ReturnTableType = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"columns\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"value\",\n [\"type\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"typeKind\"] = \"INT64\",\n },\n },\n },\n }),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"typeKind\": \"INT64\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"columns\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"value\",\n\t\t\t\t\t\"type\": map[string]interface{}{\n\t\t\t\t\t\t\"typeKind\": \"INT64\",\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\tjson1 := string(tmpJSON1)\n\t\t_, err = bigquery.NewRoutine(ctx, \"sproc\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"TABLE_VALUED_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDefinitionBody: pulumi.String(\"SELECT 1 + value AS value\\n\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"value\"),\n\t\t\t\t\tArgumentKind: pulumi.String(\"FIXED_TYPE\"),\n\t\t\t\t\tDataType: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnTableType: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var sproc = new Routine(\"sproc\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"TABLE_VALUED_FUNCTION\")\n .language(\"SQL\")\n .definitionBody(\"\"\"\nSELECT 1 + value AS value\n \"\"\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"value\")\n .argumentKind(\"FIXED_TYPE\")\n .dataType(serializeJson(\n jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n )))\n .build())\n .returnTableType(serializeJson(\n jsonObject(\n jsonProperty(\"columns\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"value\"),\n jsonProperty(\"type\", jsonObject(\n jsonProperty(\"typeKind\", \"INT64\")\n ))\n )))\n )))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n sproc:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: TABLE_VALUED_FUNCTION\n language: SQL\n definitionBody: |\n SELECT 1 + value AS value\n arguments:\n - name: value\n argumentKind: FIXED_TYPE\n dataType:\n fn::toJSON:\n typeKind: INT64\n returnTableType:\n fn::toJSON:\n columns:\n - name: value\n type:\n typeKind: INT64\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst pyspark = new gcp.bigquery.Routine(\"pyspark\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"PYTHON\",\n definitionBody: `from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\\\n .option(\"writeMethod\", \"direct\") \\\\\n .save(\"wordcount_dataset.wordcount_output\")\n`,\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\npyspark = gcp.bigquery.Routine(\"pyspark\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"PYTHON\",\n definition_body=\"\"\"from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n\"\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var pyspark = new Gcp.BigQuery.Routine(\"pyspark\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"PYTHON\",\n DefinitionBody = @\"from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"\"spark-bigquery-demo\"\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"\"bigquery\"\") \\\n .option(\"\"table\"\", \"\"bigquery-public-data:samples.shakespeare\"\") \\\n .load()\nwords.createOrReplaceTempView(\"\"words\"\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"\"sum(word_count)\"\", \"\"sum_word_count\"\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"\"bigquery\"\") \\\n .option(\"\"writeMethod\"\", \"\"direct\"\") \\\n .save(\"\"wordcount_dataset.wordcount_output\"\")\n\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"pyspark\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"PYTHON\"),\n\t\t\tDefinitionBody: pulumi.String(`from pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n`),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var pyspark = new Routine(\"pyspark\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"PYTHON\")\n .definitionBody(\"\"\"\nfrom pyspark.sql import SparkSession\n\nspark = SparkSession.builder.appName(\"spark-bigquery-demo\").getOrCreate()\n \n# Load data from BigQuery.\nwords = spark.read.format(\"bigquery\") \\\n .option(\"table\", \"bigquery-public-data:samples.shakespeare\") \\\n .load()\nwords.createOrReplaceTempView(\"words\")\n \n# Perform word count.\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\"sum(word_count)\", \"sum_word_count\")\nword_count.show()\nword_count.printSchema()\n \n# Saving the data to BigQuery\nword_count.write.format(\"bigquery\") \\\n .option(\"writeMethod\", \"direct\") \\\n .save(\"wordcount_dataset.wordcount_output\")\n \"\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n pyspark:\n type: gcp:bigquery:Routine\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: PYTHON\n definitionBody: \"from pyspark.sql import SparkSession\\n\\nspark = SparkSession.builder.appName(\\\"spark-bigquery-demo\\\").getOrCreate()\\n \\n# Load data from BigQuery.\\nwords = spark.read.format(\\\"bigquery\\\") \\\\\\n .option(\\\"table\\\", \\\"bigquery-public-data:samples.shakespeare\\\") \\\\\\n .load()\\nwords.createOrReplaceTempView(\\\"words\\\")\\n \\n# Perform word count.\\nword_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed(\\\"sum(word_count)\\\", \\\"sum_word_count\\\")\\nword_count.show()\\nword_count.printSchema()\\n \\n# Saving the data to BigQuery\\nword_count.write.format(\\\"bigquery\\\") \\\\\\n .option(\\\"writeMethod\\\", \\\"direct\\\") \\\\\\n .save(\\\"wordcount_dataset.wordcount_output\\\")\\n\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Pyspark Mainfile\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst pysparkMainfile = new gcp.bigquery.Routine(\"pyspark_mainfile\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"PYTHON\",\n definitionBody: \"\",\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n mainFileUri: \"gs://test-bucket/main.py\",\n pyFileUris: [\"gs://test-bucket/lib.py\"],\n fileUris: [\"gs://test-bucket/distribute_in_executor.json\"],\n archiveUris: [\"gs://test-bucket/distribute_in_executor.tar.gz\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\npyspark_mainfile = gcp.bigquery.Routine(\"pyspark_mainfile\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"PYTHON\",\n definition_body=\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n \"main_file_uri\": \"gs://test-bucket/main.py\",\n \"py_file_uris\": [\"gs://test-bucket/lib.py\"],\n \"file_uris\": [\"gs://test-bucket/distribute_in_executor.json\"],\n \"archive_uris\": [\"gs://test-bucket/distribute_in_executor.tar.gz\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var pysparkMainfile = new Gcp.BigQuery.Routine(\"pyspark_mainfile\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"PYTHON\",\n DefinitionBody = \"\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n MainFileUri = \"gs://test-bucket/main.py\",\n PyFileUris = new[]\n {\n \"gs://test-bucket/lib.py\",\n },\n FileUris = new[]\n {\n \"gs://test-bucket/distribute_in_executor.json\",\n },\n ArchiveUris = new[]\n {\n \"gs://test-bucket/distribute_in_executor.tar.gz\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"pyspark_mainfile\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"PYTHON\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t\tMainFileUri: pulumi.String(\"gs://test-bucket/main.py\"),\n\t\t\t\tPyFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/lib.py\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/distribute_in_executor.json\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/distribute_in_executor.tar.gz\"),\n\t\t\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var pysparkMainfile = new Routine(\"pysparkMainfile\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"PYTHON\")\n .definitionBody(\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .mainFileUri(\"gs://test-bucket/main.py\")\n .pyFileUris(\"gs://test-bucket/lib.py\")\n .fileUris(\"gs://test-bucket/distribute_in_executor.json\")\n .archiveUris(\"gs://test-bucket/distribute_in_executor.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n pysparkMainfile:\n type: gcp:bigquery:Routine\n name: pyspark_mainfile\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: PYTHON\n definitionBody: \"\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n mainFileUri: gs://test-bucket/main.py\n pyFileUris:\n - gs://test-bucket/lib.py\n fileUris:\n - gs://test-bucket/distribute_in_executor.json\n archiveUris:\n - gs://test-bucket/distribute_in_executor.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Spark Jar\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n spark: {},\n});\nconst sparkJar = new gcp.bigquery.Routine(\"spark_jar\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"PROCEDURE\",\n language: \"SCALA\",\n definitionBody: \"\",\n sparkOptions: {\n connection: testConnection.name,\n runtimeVersion: \"2.1\",\n containerImage: \"gcr.io/my-project-id/my-spark-image:latest\",\n mainClass: \"com.google.test.jar.MainClass\",\n jarUris: [\"gs://test-bucket/uberjar_spark_spark3.jar\"],\n properties: {\n \"spark.dataproc.scaling.version\": \"2\",\n \"spark.reducer.fetchMigratedShuffle.enabled\": \"true\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n spark={})\nspark_jar = gcp.bigquery.Routine(\"spark_jar\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"PROCEDURE\",\n language=\"SCALA\",\n definition_body=\"\",\n spark_options={\n \"connection\": test_connection.name,\n \"runtime_version\": \"2.1\",\n \"container_image\": \"gcr.io/my-project-id/my-spark-image:latest\",\n \"main_class\": \"com.google.test.jar.MainClass\",\n \"jar_uris\": [\"gs://test-bucket/uberjar_spark_spark3.jar\"],\n \"properties\": {\n \"spark.dataproc.scaling.version\": \"2\",\n \"spark.reducer.fetchMigratedShuffle.enabled\": \"true\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n Spark = null,\n });\n\n var sparkJar = new Gcp.BigQuery.Routine(\"spark_jar\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"PROCEDURE\",\n Language = \"SCALA\",\n DefinitionBody = \"\",\n SparkOptions = new Gcp.BigQuery.Inputs.RoutineSparkOptionsArgs\n {\n Connection = testConnection.Name,\n RuntimeVersion = \"2.1\",\n ContainerImage = \"gcr.io/my-project-id/my-spark-image:latest\",\n MainClass = \"com.google.test.jar.MainClass\",\n JarUris = new[]\n {\n \"gs://test-bucket/uberjar_spark_spark3.jar\",\n },\n Properties = \n {\n { \"spark.dataproc.scaling.version\", \"2\" },\n { \"spark.reducer.fetchMigratedShuffle.enabled\", \"true\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tSpark: \u0026bigquery.ConnectionSparkArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"spark_jar\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"PROCEDURE\"),\n\t\t\tLanguage: pulumi.String(\"SCALA\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tSparkOptions: \u0026bigquery.RoutineSparkOptionsArgs{\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tRuntimeVersion: pulumi.String(\"2.1\"),\n\t\t\t\tContainerImage: pulumi.String(\"gcr.io/my-project-id/my-spark-image:latest\"),\n\t\t\t\tMainClass: pulumi.String(\"com.google.test.jar.MainClass\"),\n\t\t\t\tJarUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://test-bucket/uberjar_spark_spark3.jar\"),\n\t\t\t\t},\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dataproc.scaling.version\": pulumi.String(\"2\"),\n\t\t\t\t\t\"spark.reducer.fetchMigratedShuffle.enabled\": pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionSparkArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineSparkOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .spark()\n .build());\n\n var sparkJar = new Routine(\"sparkJar\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"PROCEDURE\")\n .language(\"SCALA\")\n .definitionBody(\"\")\n .sparkOptions(RoutineSparkOptionsArgs.builder()\n .connection(testConnection.name())\n .runtimeVersion(\"2.1\")\n .containerImage(\"gcr.io/my-project-id/my-spark-image:latest\")\n .mainClass(\"com.google.test.jar.MainClass\")\n .jarUris(\"gs://test-bucket/uberjar_spark_spark3.jar\")\n .properties(Map.ofEntries(\n Map.entry(\"spark.dataproc.scaling.version\", \"2\"),\n Map.entry(\"spark.reducer.fetchMigratedShuffle.enabled\", \"true\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n spark: {}\n sparkJar:\n type: gcp:bigquery:Routine\n name: spark_jar\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: PROCEDURE\n language: SCALA\n definitionBody: \"\"\n sparkOptions:\n connection: ${testConnection.name}\n runtimeVersion: '2.1'\n containerImage: gcr.io/my-project-id/my-spark-image:latest\n mainClass: com.google.test.jar.MainClass\n jarUris:\n - gs://test-bucket/uberjar_spark_spark3.jar\n properties:\n spark.dataproc.scaling.version: '2'\n spark.reducer.fetchMigratedShuffle.enabled: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Data Governance Type\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"tf_test_dataset_id_81126\"});\nconst customMaskingRoutine = new gcp.bigquery.Routine(\"custom_masking_routine\", {\n datasetId: test.datasetId,\n routineId: \"custom_masking_routine\",\n routineType: \"SCALAR_FUNCTION\",\n language: \"SQL\",\n dataGovernanceType: \"DATA_MASKING\",\n definitionBody: \"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n arguments: [{\n name: \"ssn\",\n dataType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n }],\n returnType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"tf_test_dataset_id_81126\")\ncustom_masking_routine = gcp.bigquery.Routine(\"custom_masking_routine\",\n dataset_id=test.dataset_id,\n routine_id=\"custom_masking_routine\",\n routine_type=\"SCALAR_FUNCTION\",\n language=\"SQL\",\n data_governance_type=\"DATA_MASKING\",\n definition_body=\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n arguments=[{\n \"name\": \"ssn\",\n \"data_type\": \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n }],\n return_type=\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"tf_test_dataset_id_81126\",\n });\n\n var customMaskingRoutine = new Gcp.BigQuery.Routine(\"custom_masking_routine\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"custom_masking_routine\",\n RoutineType = \"SCALAR_FUNCTION\",\n Language = \"SQL\",\n DataGovernanceType = \"DATA_MASKING\",\n DefinitionBody = \"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\",\n Arguments = new[]\n {\n new Gcp.BigQuery.Inputs.RoutineArgumentArgs\n {\n Name = \"ssn\",\n DataType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n },\n },\n ReturnType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"tf_test_dataset_id_81126\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"custom_masking_routine\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"custom_masking_routine\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tLanguage: pulumi.String(\"SQL\"),\n\t\t\tDataGovernanceType: pulumi.String(\"DATA_MASKING\"),\n\t\t\tDefinitionBody: pulumi.String(\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\"),\n\t\t\tArguments: bigquery.RoutineArgumentArray{\n\t\t\t\t\u0026bigquery.RoutineArgumentArgs{\n\t\t\t\t\tName: pulumi.String(\"ssn\"),\n\t\t\t\t\tDataType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"tf_test_dataset_id_81126\")\n .build());\n\n var customMaskingRoutine = new Routine(\"customMaskingRoutine\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"custom_masking_routine\")\n .routineType(\"SCALAR_FUNCTION\")\n .language(\"SQL\")\n .dataGovernanceType(\"DATA_MASKING\")\n .definitionBody(\"SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\")\n .arguments(RoutineArgumentArgs.builder()\n .name(\"ssn\")\n .dataType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .build())\n .returnType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: tf_test_dataset_id_81126\n customMaskingRoutine:\n type: gcp:bigquery:Routine\n name: custom_masking_routine\n properties:\n datasetId: ${test.datasetId}\n routineId: custom_masking_routine\n routineType: SCALAR_FUNCTION\n language: SQL\n dataGovernanceType: DATA_MASKING\n definitionBody: SAFE.REGEXP_REPLACE(ssn, '[0-9]', 'X')\n arguments:\n - name: ssn\n dataType: '{\"typeKind\" : \"STRING\"}'\n returnType: '{\"typeKind\" : \"STRING\"}'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquery Routine Remote Function\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"dataset_id\"});\nconst testConnection = new gcp.bigquery.Connection(\"test\", {\n connectionId: \"connection_id\",\n location: \"US\",\n cloudResource: {},\n});\nconst remoteFunction = new gcp.bigquery.Routine(\"remote_function\", {\n datasetId: test.datasetId,\n routineId: \"routine_id\",\n routineType: \"SCALAR_FUNCTION\",\n definitionBody: \"\",\n returnType: \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n remoteFunctionOptions: {\n endpoint: \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n connection: testConnection.name,\n maxBatchingRows: \"10\",\n userDefinedContext: {\n z: \"1.5\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"dataset_id\")\ntest_connection = gcp.bigquery.Connection(\"test\",\n connection_id=\"connection_id\",\n location=\"US\",\n cloud_resource={})\nremote_function = gcp.bigquery.Routine(\"remote_function\",\n dataset_id=test.dataset_id,\n routine_id=\"routine_id\",\n routine_type=\"SCALAR_FUNCTION\",\n definition_body=\"\",\n return_type=\"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n remote_function_options={\n \"endpoint\": \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n \"connection\": test_connection.name,\n \"max_batching_rows\": \"10\",\n \"user_defined_context\": {\n \"z\": \"1.5\",\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 test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"dataset_id\",\n });\n\n var testConnection = new Gcp.BigQuery.Connection(\"test\", new()\n {\n ConnectionId = \"connection_id\",\n Location = \"US\",\n CloudResource = null,\n });\n\n var remoteFunction = new Gcp.BigQuery.Routine(\"remote_function\", new()\n {\n DatasetId = test.DatasetId,\n RoutineId = \"routine_id\",\n RoutineType = \"SCALAR_FUNCTION\",\n DefinitionBody = \"\",\n ReturnType = \"{\\\"typeKind\\\" : \\\"STRING\\\"}\",\n RemoteFunctionOptions = new Gcp.BigQuery.Inputs.RoutineRemoteFunctionOptionsArgs\n {\n Endpoint = \"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\",\n Connection = testConnection.Name,\n MaxBatchingRows = \"10\",\n UserDefinedContext = \n {\n { \"z\", \"1.5\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dataset_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestConnection, err := bigquery.NewConnection(ctx, \"test\", \u0026bigquery.ConnectionArgs{\n\t\t\tConnectionId: pulumi.String(\"connection_id\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tCloudResource: \u0026bigquery.ConnectionCloudResourceArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewRoutine(ctx, \"remote_function\", \u0026bigquery.RoutineArgs{\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tRoutineId: pulumi.String(\"routine_id\"),\n\t\t\tRoutineType: pulumi.String(\"SCALAR_FUNCTION\"),\n\t\t\tDefinitionBody: pulumi.String(\"\"),\n\t\t\tReturnType: pulumi.String(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\"),\n\t\t\tRemoteFunctionOptions: \u0026bigquery.RoutineRemoteFunctionOptionsArgs{\n\t\t\t\tEndpoint: pulumi.String(\"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\"),\n\t\t\t\tConnection: testConnection.Name,\n\t\t\t\tMaxBatchingRows: pulumi.String(\"10\"),\n\t\t\t\tUserDefinedContext: pulumi.StringMap{\n\t\t\t\t\t\"z\": pulumi.String(\"1.5\"),\n\t\t\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.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Connection;\nimport com.pulumi.gcp.bigquery.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.inputs.ConnectionCloudResourceArgs;\nimport com.pulumi.gcp.bigquery.Routine;\nimport com.pulumi.gcp.bigquery.RoutineArgs;\nimport com.pulumi.gcp.bigquery.inputs.RoutineRemoteFunctionOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"dataset_id\")\n .build());\n\n var testConnection = new Connection(\"testConnection\", ConnectionArgs.builder()\n .connectionId(\"connection_id\")\n .location(\"US\")\n .cloudResource()\n .build());\n\n var remoteFunction = new Routine(\"remoteFunction\", RoutineArgs.builder()\n .datasetId(test.datasetId())\n .routineId(\"routine_id\")\n .routineType(\"SCALAR_FUNCTION\")\n .definitionBody(\"\")\n .returnType(\"{\\\"typeKind\\\" : \\\"STRING\\\"}\")\n .remoteFunctionOptions(RoutineRemoteFunctionOptionsArgs.builder()\n .endpoint(\"https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\")\n .connection(testConnection.name())\n .maxBatchingRows(\"10\")\n .userDefinedContext(Map.of(\"z\", \"1.5\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dataset_id\n testConnection:\n type: gcp:bigquery:Connection\n name: test\n properties:\n connectionId: connection_id\n location: US\n cloudResource: {}\n remoteFunction:\n type: gcp:bigquery:Routine\n name: remote_function\n properties:\n datasetId: ${test.datasetId}\n routineId: routine_id\n routineType: SCALAR_FUNCTION\n definitionBody: \"\"\n returnType: '{\"typeKind\" : \"STRING\"}'\n remoteFunctionOptions:\n endpoint: https://us-east1-my_gcf_project.cloudfunctions.net/remote_add\n connection: ${testConnection.name}\n maxBatchingRows: '10'\n userDefinedContext:\n z: '1.5'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRoutine can be imported using any of these accepted formats:\n\n* `projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}`\n\n* `{{project}}/{{dataset_id}}/{{routine_id}}`\n\n* `{{dataset_id}}/{{routine_id}}`\n\nWhen using the `pulumi import` command, Routine can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default {{project}}/{{dataset_id}}/{{routine_id}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/routine:Routine default {{dataset_id}}/{{routine_id}}\n```\n\n", "properties": { "arguments": { "type": "array", @@ -150055,7 +150600,7 @@ } }, "gcp:billing/projectInfo:ProjectInfo": { - "description": "Billing information for a project.\n\n\nTo get more information about ProjectInfo, see:\n\n* [API documentation](https://cloud.google.com/billing/docs/reference/rest/v1/projects)\n* How-to Guides\n * [Enable, disable, or change billing for a project](https://cloud.google.com/billing/docs/how-to/modify-project)\n\n## Example Usage\n\n### Billing Project Info Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_81126\",\n name: \"tf-test_88717\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst _default = new gcp.billing.ProjectInfo(\"default\", {\n project: project.projectId,\n billingAccount: \"000000-0000000-0000000-000000\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_81126\",\n name=\"tf-test_88717\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\ndefault = gcp.billing.ProjectInfo(\"default\",\n project=project.project_id,\n billing_account=\"000000-0000000-0000000-000000\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_81126\",\n Name = \"tf-test_88717\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var @default = new Gcp.Billing.ProjectInfo(\"default\", new()\n {\n Project = project.ProjectId,\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_81126\"),\n\t\t\tName: pulumi.String(\"tf-test_88717\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewProjectInfo(ctx, \"default\", \u0026billing.ProjectInfoArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.billing.ProjectInfo;\nimport com.pulumi.gcp.billing.ProjectInfoArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_81126\")\n .name(\"tf-test_88717\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var default_ = new ProjectInfo(\"default\", ProjectInfoArgs.builder()\n .project(project.projectId())\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_81126\n name: tf-test_88717\n orgId: '123456789'\n deletionPolicy: DELETE\n default:\n type: gcp:billing:ProjectInfo\n properties:\n project: ${project.projectId}\n billingAccount: 000000-0000000-0000000-000000\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectInfo can be imported using any of these accepted formats:\n\n* `projects/{{project}}`\n\n* `{{project}}`\n\nWhen using the `pulumi import` command, ProjectInfo can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:billing/projectInfo:ProjectInfo default projects/{{project}}\n```\n\n```sh\n$ pulumi import gcp:billing/projectInfo:ProjectInfo default {{project}}\n```\n\n", + "description": "Billing information for a project.\n\n\nTo get more information about ProjectInfo, see:\n\n* [API documentation](https://cloud.google.com/billing/docs/reference/rest/v1/projects)\n* How-to Guides\n * [Enable, disable, or change billing for a project](https://cloud.google.com/billing/docs/how-to/modify-project)\n\n## Example Usage\n\n### Billing Project Info Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_88717\",\n name: \"tf-test_85794\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst _default = new gcp.billing.ProjectInfo(\"default\", {\n project: project.projectId,\n billingAccount: \"000000-0000000-0000000-000000\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_88717\",\n name=\"tf-test_85794\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\ndefault = gcp.billing.ProjectInfo(\"default\",\n project=project.project_id,\n billing_account=\"000000-0000000-0000000-000000\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_88717\",\n Name = \"tf-test_85794\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var @default = new Gcp.Billing.ProjectInfo(\"default\", new()\n {\n Project = project.ProjectId,\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_88717\"),\n\t\t\tName: pulumi.String(\"tf-test_85794\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewProjectInfo(ctx, \"default\", \u0026billing.ProjectInfoArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.billing.ProjectInfo;\nimport com.pulumi.gcp.billing.ProjectInfoArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_88717\")\n .name(\"tf-test_85794\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var default_ = new ProjectInfo(\"default\", ProjectInfoArgs.builder()\n .project(project.projectId())\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_88717\n name: tf-test_85794\n orgId: '123456789'\n deletionPolicy: DELETE\n default:\n type: gcp:billing:ProjectInfo\n properties:\n project: ${project.projectId}\n billingAccount: 000000-0000000-0000000-000000\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectInfo can be imported using any of these accepted formats:\n\n* `projects/{{project}}`\n\n* `{{project}}`\n\nWhen using the `pulumi import` command, ProjectInfo can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:billing/projectInfo:ProjectInfo default projects/{{project}}\n```\n\n```sh\n$ pulumi import gcp:billing/projectInfo:ProjectInfo default {{project}}\n```\n\n", "properties": { "billingAccount": { "type": "string", @@ -153590,7 +154135,7 @@ }, "dataAccessLabelId": { "type": "string", - "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. It must\nonly contain ASCII lowercase letters, numbers, and dashes; it must begin\nwith a letter, and it must not exceed 1000 characters.\n\n\n- - -\n" + "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. The\nmaximum number of characters should be 63. Regex pattern is as per AIP:\nhttps://google.aip.dev/122#resource-id-segments\n\n\n- - -\n" }, "description": { "type": "string", @@ -153645,7 +154190,7 @@ "inputProperties": { "dataAccessLabelId": { "type": "string", - "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. It must\nonly contain ASCII lowercase letters, numbers, and dashes; it must begin\nwith a letter, and it must not exceed 1000 characters.\n\n\n- - -\n", + "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. The\nmaximum number of characters should be 63. Regex pattern is as per AIP:\nhttps://google.aip.dev/122#resource-id-segments\n\n\n- - -\n", "willReplaceOnChanges": true }, "description": { @@ -153691,7 +154236,7 @@ }, "dataAccessLabelId": { "type": "string", - "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. It must\nonly contain ASCII lowercase letters, numbers, and dashes; it must begin\nwith a letter, and it must not exceed 1000 characters.\n\n\n- - -\n", + "description": "Required. The ID to use for the data access label, which will become the label's\ndisplay name and the final component of the label's resource name. The\nmaximum number of characters should be 63. Regex pattern is as per AIP:\nhttps://google.aip.dev/122#resource-id-segments\n\n\n- - -\n", "willReplaceOnChanges": true }, "description": { @@ -153937,6 +154482,691 @@ "type": "object" } }, + "gcp:chronicle/referenceList:ReferenceList": { + "description": "## Example Usage\n\n### Chronicle Referencelist 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.chronicle.ReferenceList(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n referenceListId: \"reference_list_id\",\n description: \"referencelist-description\",\n entries: [{\n value: \"referencelist-entry-value\",\n }],\n syntaxType: \"REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.chronicle.ReferenceList(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n reference_list_id=\"reference_list_id\",\n description=\"referencelist-description\",\n entries=[{\n \"value\": \"referencelist-entry-value\",\n }],\n syntax_type=\"REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\")\n```\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.Chronicle.ReferenceList(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n ReferenceListId = \"reference_list_id\",\n Description = \"referencelist-description\",\n Entries = new[]\n {\n new Gcp.Chronicle.Inputs.ReferenceListEntryArgs\n {\n Value = \"referencelist-entry-value\",\n },\n },\n SyntaxType = \"REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewReferenceList(ctx, \"example\", \u0026chronicle.ReferenceListArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tReferenceListId: pulumi.String(\"reference_list_id\"),\n\t\t\tDescription: pulumi.String(\"referencelist-description\"),\n\t\t\tEntries: chronicle.ReferenceListEntryArray{\n\t\t\t\t\u0026chronicle.ReferenceListEntryArgs{\n\t\t\t\t\tValue: pulumi.String(\"referencelist-entry-value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSyntaxType: pulumi.String(\"REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.chronicle.ReferenceList;\nimport com.pulumi.gcp.chronicle.ReferenceListArgs;\nimport com.pulumi.gcp.chronicle.inputs.ReferenceListEntryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ReferenceList(\"example\", ReferenceListArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .referenceListId(\"reference_list_id\")\n .description(\"referencelist-description\")\n .entries(ReferenceListEntryArgs.builder()\n .value(\"referencelist-entry-value\")\n .build())\n .syntaxType(\"REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:chronicle:ReferenceList\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n referenceListId: reference_list_id\n description: referencelist-description\n entries:\n - value: referencelist-entry-value\n syntaxType: REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nReferenceList can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}`\n\n* `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}`\n\n* `{{location}}/{{instance}}/{{reference_list_id}}`\n\nWhen using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}}\n```\n\n", + "properties": { + "description": { + "type": "string", + "description": "Required. A user-provided description of the reference list.\n" + }, + "displayName": { + "type": "string", + "description": "Output only. The unique display name of the reference list.\n" + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/ReferenceListEntry:ReferenceListEntry" + }, + "description": "Required. The entries of the reference list.\nWhen listed, they are returned in the order that was specified at creation\nor update. The combined size of the values of the reference list may not\nexceed 6MB.\nThis is returned only when the view is REFERENCE_LIST_VIEW_FULL.\nStructure is documented below.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n" + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n" + }, + "name": { + "type": "string", + "description": "Output only. The resource name of the reference list.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list}\n" + }, + "project": { + "type": "string" + }, + "referenceListId": { + "type": "string", + "description": "Required. The ID to use for the reference list. This is also the display name for\nthe reference list. It must satisfy the following requirements:\n- Starts with letter.\n- Contains only letters, numbers and underscore.\n- Has length \u003c 256.\n- Must be unique.\n" + }, + "revisionCreateTime": { + "type": "string", + "description": "Output only. The timestamp when the reference list was last updated.\n" + }, + "ruleAssociationsCount": { + "type": "integer", + "description": "Output only. The count of self-authored rules using the reference list.\n" + }, + "rules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The resource names for the associated self-authored Rules that use this\nreference list.\nThis is returned only when the view is REFERENCE_LIST_VIEW_FULL.\n" + }, + "scopeInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/ReferenceListScopeInfo:ReferenceListScopeInfo" + }, + "description": "ScopeInfo specifies the scope info of the reference list.\nStructure is documented below.\n" + }, + "syntaxType": { + "type": "string", + "description": "Possible values:\nREFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\nREFERENCE_LIST_SYNTAX_TYPE_REGEX\nREFERENCE_LIST_SYNTAX_TYPE_CIDR\n" + } + }, + "required": [ + "description", + "displayName", + "entries", + "instance", + "location", + "name", + "project", + "referenceListId", + "revisionCreateTime", + "ruleAssociationsCount", + "rules", + "scopeInfos", + "syntaxType" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "Required. A user-provided description of the reference list.\n" + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/ReferenceListEntry:ReferenceListEntry" + }, + "description": "Required. The entries of the reference list.\nWhen listed, they are returned in the order that was specified at creation\nor update. The combined size of the values of the reference list may not\nexceed 6MB.\nThis is returned only when the view is REFERENCE_LIST_VIEW_FULL.\nStructure is documented below.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "referenceListId": { + "type": "string", + "description": "Required. The ID to use for the reference list. This is also the display name for\nthe reference list. It must satisfy the following requirements:\n- Starts with letter.\n- Contains only letters, numbers and underscore.\n- Has length \u003c 256.\n- Must be unique.\n", + "willReplaceOnChanges": true + }, + "syntaxType": { + "type": "string", + "description": "Possible values:\nREFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\nREFERENCE_LIST_SYNTAX_TYPE_REGEX\nREFERENCE_LIST_SYNTAX_TYPE_CIDR\n" + } + }, + "requiredInputs": [ + "description", + "entries", + "instance", + "location", + "referenceListId", + "syntaxType" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ReferenceList resources.\n", + "properties": { + "description": { + "type": "string", + "description": "Required. A user-provided description of the reference list.\n" + }, + "displayName": { + "type": "string", + "description": "Output only. The unique display name of the reference list.\n" + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/ReferenceListEntry:ReferenceListEntry" + }, + "description": "Required. The entries of the reference list.\nWhen listed, they are returned in the order that was specified at creation\nor update. The combined size of the values of the reference list may not\nexceed 6MB.\nThis is returned only when the view is REFERENCE_LIST_VIEW_FULL.\nStructure is documented below.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Output only. The resource name of the reference list.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list}\n" + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "referenceListId": { + "type": "string", + "description": "Required. The ID to use for the reference list. This is also the display name for\nthe reference list. It must satisfy the following requirements:\n- Starts with letter.\n- Contains only letters, numbers and underscore.\n- Has length \u003c 256.\n- Must be unique.\n", + "willReplaceOnChanges": true + }, + "revisionCreateTime": { + "type": "string", + "description": "Output only. The timestamp when the reference list was last updated.\n" + }, + "ruleAssociationsCount": { + "type": "integer", + "description": "Output only. The count of self-authored rules using the reference list.\n" + }, + "rules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The resource names for the associated self-authored Rules that use this\nreference list.\nThis is returned only when the view is REFERENCE_LIST_VIEW_FULL.\n" + }, + "scopeInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/ReferenceListScopeInfo:ReferenceListScopeInfo" + }, + "description": "ScopeInfo specifies the scope info of the reference list.\nStructure is documented below.\n" + }, + "syntaxType": { + "type": "string", + "description": "Possible values:\nREFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING\nREFERENCE_LIST_SYNTAX_TYPE_REGEX\nREFERENCE_LIST_SYNTAX_TYPE_CIDR\n" + } + }, + "type": "object" + } + }, + "gcp:chronicle/rule:Rule": { + "description": "## Example Usage\n\n### Chronicle Rule 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.chronicle.Rule(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n deletionPolicy: \"DEFAULT\",\n text: \"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.chronicle.Rule(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n deletion_policy=\"DEFAULT\",\n text=\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\")\n```\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.Chronicle.Rule(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n DeletionPolicy = \"DEFAULT\",\n Text = @\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewRule(ctx, \"example\", \u0026chronicle.RuleArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DEFAULT\"),\n\t\t\tText: pulumi.String(\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.chronicle.Rule;\nimport com.pulumi.gcp.chronicle.RuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Rule(\"example\", RuleArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .deletionPolicy(\"DEFAULT\")\n .text(\"\"\"\nrule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n \"\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:chronicle:Rule\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n deletionPolicy: DEFAULT\n text: |\n rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Chronicle Rule With Force Deletion\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.chronicle.Rule(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n deletionPolicy: \"FORCE\",\n text: \"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.chronicle.Rule(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n deletion_policy=\"FORCE\",\n text=\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\")\n```\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.Chronicle.Rule(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n DeletionPolicy = \"FORCE\",\n Text = @\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewRule(ctx, \"example\", \u0026chronicle.RuleArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"FORCE\"),\n\t\t\tText: pulumi.String(\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.chronicle.Rule;\nimport com.pulumi.gcp.chronicle.RuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Rule(\"example\", RuleArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .deletionPolicy(\"FORCE\")\n .text(\"\"\"\nrule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n \"\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:chronicle:Rule\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n deletionPolicy: FORCE\n text: |\n rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Chronicle Rule With Data Access Scope\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataAccessScopeTest = new gcp.chronicle.DataAccessScope(\"data_access_scope_test\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n dataAccessScopeId: \"scope-name\",\n description: \"scope-description\",\n allowedDataAccessLabels: [{\n logType: \"GCP_CLOUDAUDIT\",\n }],\n});\nconst example = new gcp.chronicle.Rule(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n scope: googleChronicleDataAccessScope.dataAccessScopeTest.name,\n text: \"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndata_access_scope_test = gcp.chronicle.DataAccessScope(\"data_access_scope_test\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n data_access_scope_id=\"scope-name\",\n description=\"scope-description\",\n allowed_data_access_labels=[{\n \"log_type\": \"GCP_CLOUDAUDIT\",\n }])\nexample = gcp.chronicle.Rule(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n scope=google_chronicle_data_access_scope[\"dataAccessScopeTest\"][\"name\"],\n text=\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataAccessScopeTest = new Gcp.Chronicle.DataAccessScope(\"data_access_scope_test\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n DataAccessScopeId = \"scope-name\",\n Description = \"scope-description\",\n AllowedDataAccessLabels = new[]\n {\n new Gcp.Chronicle.Inputs.DataAccessScopeAllowedDataAccessLabelArgs\n {\n LogType = \"GCP_CLOUDAUDIT\",\n },\n },\n });\n\n var example = new Gcp.Chronicle.Rule(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n Scope = googleChronicleDataAccessScope.DataAccessScopeTest.Name,\n Text = @\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewDataAccessScope(ctx, \"data_access_scope_test\", \u0026chronicle.DataAccessScopeArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tDataAccessScopeId: pulumi.String(\"scope-name\"),\n\t\t\tDescription: pulumi.String(\"scope-description\"),\n\t\t\tAllowedDataAccessLabels: chronicle.DataAccessScopeAllowedDataAccessLabelArray{\n\t\t\t\t\u0026chronicle.DataAccessScopeAllowedDataAccessLabelArgs{\n\t\t\t\t\tLogType: pulumi.String(\"GCP_CLOUDAUDIT\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronicle.NewRule(ctx, \"example\", \u0026chronicle.RuleArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tScope: pulumi.Any(googleChronicleDataAccessScope.DataAccessScopeTest.Name),\n\t\t\tText: pulumi.String(\"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.chronicle.DataAccessScope;\nimport com.pulumi.gcp.chronicle.DataAccessScopeArgs;\nimport com.pulumi.gcp.chronicle.inputs.DataAccessScopeAllowedDataAccessLabelArgs;\nimport com.pulumi.gcp.chronicle.Rule;\nimport com.pulumi.gcp.chronicle.RuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataAccessScopeTest = new DataAccessScope(\"dataAccessScopeTest\", DataAccessScopeArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .dataAccessScopeId(\"scope-name\")\n .description(\"scope-description\")\n .allowedDataAccessLabels(DataAccessScopeAllowedDataAccessLabelArgs.builder()\n .logType(\"GCP_CLOUDAUDIT\")\n .build())\n .build());\n\n var example = new Rule(\"example\", RuleArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .scope(googleChronicleDataAccessScope.dataAccessScopeTest().name())\n .text(\"\"\"\nrule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n \"\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataAccessScopeTest:\n type: gcp:chronicle:DataAccessScope\n name: data_access_scope_test\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n dataAccessScopeId: scope-name\n description: scope-description\n allowedDataAccessLabels:\n - logType: GCP_CLOUDAUDIT\n example:\n type: gcp:chronicle:Rule\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n scope: ${googleChronicleDataAccessScope.dataAccessScopeTest.name}\n text: |\n rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRule can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}`\n\n* `{{project}}/{{location}}/{{instance}}/{{rule_id}}`\n\n* `{{location}}/{{instance}}/{{rule_id}}`\n\nWhen using the `pulumi import` command, Rule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}}\n```\n\n", + "properties": { + "allowedRunFrequencies": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The run frequencies that are allowed for the rule.\nPopulated in BASIC view and FULL view.\n" + }, + "author": { + "type": "string", + "description": "Output only. The author of the rule. Extracted from the meta section of text.\nPopulated in BASIC view and FULL view.\n" + }, + "compilationDiagnostics": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/RuleCompilationDiagnostic:RuleCompilationDiagnostic" + }, + "description": "Output only. A list of a rule's corresponding compilation diagnostic messages\nsuch as compilation errors and compilation warnings.\nPopulated in FULL view.\nStructure is documented below.\n" + }, + "compilationState": { + "type": "string", + "description": "Output only. The current compilation state of the rule.\nPopulated in FULL view.\nPossible values:\nCOMPILATION_STATE_UNSPECIFIED\nSUCCEEDED\nFAILED\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The timestamp of when the rule was created.\nPopulated in FULL view.\n" + }, + "dataTables": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. Resource names of the data tables used in this rule.\n" + }, + "deletionPolicy": { + "type": "string", + "description": "Policy to determine if the rule should be deleted forcefully.\nIf deletion_policy = \"FORCE\", any retrohunts and any detections associated with the rule\nwill also be deleted. If deletion_policy = \"DEFAULT\", the call will only succeed if the\nrule has no associated retrohunts, including completed retrohunts, and no\nassociated detections. Regardless of this field's value, the rule\ndeployment associated with this rule will also be deleted.\nPossible values: DEFAULT, FORCE\n" + }, + "displayName": { + "type": "string", + "description": "The display name of the severity level. Extracted from the meta section of\nthe rule text.\n" + }, + "etag": { + "type": "string", + "description": "The etag for this rule.\nIf this is provided on update, the request will succeed if and only if it\nmatches the server-computed value, and will fail with an ABORTED error\notherwise.\nPopulated in BASIC view and FULL view.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n\n\n- - -\n" + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Output only. Additional metadata specified in the meta section of text.\nPopulated in FULL view.\n" + }, + "name": { + "type": "string", + "description": "Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\n" + }, + "nearRealTimeLiveRuleEligible": { + "type": "boolean", + "description": "Output only. Indicate the rule can run in near real time live rule.\nIf this is true, the rule uses the near real time live rule when the run\nfrequency is set to LIVE.\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" + }, + "referenceLists": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. Resource names of the reference lists used in this rule.\nPopulated in FULL view.\n" + }, + "revisionCreateTime": { + "type": "string", + "description": "Output only. The timestamp of when the rule revision was created.\nPopulated in FULL, REVISION_METADATA_ONLY views.\n" + }, + "revisionId": { + "type": "string", + "description": "Output only. The revision ID of the rule.\nA new revision is created whenever the rule text is changed in any way.\nFormat: v_{10 digits}_{9 digits}\nPopulated in REVISION_METADATA_ONLY view and FULL view.\n" + }, + "ruleId": { + "type": "string", + "description": "Rule Id is the ID of the Rule.\n" + }, + "scope": { + "type": "string", + "description": "Resource name of the DataAccessScope bound to this rule.\nPopulated in BASIC view and FULL view.\nIf reference lists are used in the rule, validations will be performed\nagainst this scope to ensure that the reference lists are compatible with\nboth the user's and the rule's scopes.\nThe scope should be in the format:\n\"projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}\".\n" + }, + "severities": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/RuleSeverity:RuleSeverity" + }, + "description": "(Output)\nOutput only. The severity of a rule's compilation diagnostic.\nPossible values:\nSEVERITY_UNSPECIFIED\nWARNING\nERROR\n" + }, + "text": { + "type": "string", + "description": "The YARA-L content of the rule.\nPopulated in FULL view.\n" + }, + "type": { + "type": "string", + "description": "Possible values:\nRULE_TYPE_UNSPECIFIED\nSINGLE_EVENT\nMULTI_EVENT\n" + } + }, + "required": [ + "allowedRunFrequencies", + "author", + "compilationDiagnostics", + "compilationState", + "createTime", + "dataTables", + "displayName", + "etag", + "instance", + "location", + "metadata", + "name", + "nearRealTimeLiveRuleEligible", + "project", + "referenceLists", + "revisionCreateTime", + "revisionId", + "ruleId", + "severities", + "type" + ], + "inputProperties": { + "deletionPolicy": { + "type": "string", + "description": "Policy to determine if the rule should be deleted forcefully.\nIf deletion_policy = \"FORCE\", any retrohunts and any detections associated with the rule\nwill also be deleted. If deletion_policy = \"DEFAULT\", the call will only succeed if the\nrule has no associated retrohunts, including completed retrohunts, and no\nassociated detections. Regardless of this field's value, the rule\ndeployment associated with this rule will also be deleted.\nPossible values: DEFAULT, FORCE\n" + }, + "etag": { + "type": "string", + "description": "The etag for this rule.\nIf this is provided on update, the request will succeed if and only if it\nmatches the server-computed value, and will fail with an ABORTED error\notherwise.\nPopulated in BASIC view and FULL view.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\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 + }, + "ruleId": { + "type": "string", + "description": "Rule Id is the ID of the Rule.\n" + }, + "scope": { + "type": "string", + "description": "Resource name of the DataAccessScope bound to this rule.\nPopulated in BASIC view and FULL view.\nIf reference lists are used in the rule, validations will be performed\nagainst this scope to ensure that the reference lists are compatible with\nboth the user's and the rule's scopes.\nThe scope should be in the format:\n\"projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}\".\n" + }, + "text": { + "type": "string", + "description": "The YARA-L content of the rule.\nPopulated in FULL view.\n" + } + }, + "requiredInputs": [ + "instance", + "location" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Rule resources.\n", + "properties": { + "allowedRunFrequencies": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The run frequencies that are allowed for the rule.\nPopulated in BASIC view and FULL view.\n" + }, + "author": { + "type": "string", + "description": "Output only. The author of the rule. Extracted from the meta section of text.\nPopulated in BASIC view and FULL view.\n" + }, + "compilationDiagnostics": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/RuleCompilationDiagnostic:RuleCompilationDiagnostic" + }, + "description": "Output only. A list of a rule's corresponding compilation diagnostic messages\nsuch as compilation errors and compilation warnings.\nPopulated in FULL view.\nStructure is documented below.\n" + }, + "compilationState": { + "type": "string", + "description": "Output only. The current compilation state of the rule.\nPopulated in FULL view.\nPossible values:\nCOMPILATION_STATE_UNSPECIFIED\nSUCCEEDED\nFAILED\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The timestamp of when the rule was created.\nPopulated in FULL view.\n" + }, + "dataTables": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. Resource names of the data tables used in this rule.\n" + }, + "deletionPolicy": { + "type": "string", + "description": "Policy to determine if the rule should be deleted forcefully.\nIf deletion_policy = \"FORCE\", any retrohunts and any detections associated with the rule\nwill also be deleted. If deletion_policy = \"DEFAULT\", the call will only succeed if the\nrule has no associated retrohunts, including completed retrohunts, and no\nassociated detections. Regardless of this field's value, the rule\ndeployment associated with this rule will also be deleted.\nPossible values: DEFAULT, FORCE\n" + }, + "displayName": { + "type": "string", + "description": "The display name of the severity level. Extracted from the meta section of\nthe rule text.\n" + }, + "etag": { + "type": "string", + "description": "The etag for this rule.\nIf this is provided on update, the request will succeed if and only if it\nmatches the server-computed value, and will fail with an ABORTED error\notherwise.\nPopulated in BASIC view and FULL view.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n", + "willReplaceOnChanges": true + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Output only. Additional metadata specified in the meta section of text.\nPopulated in FULL view.\n" + }, + "name": { + "type": "string", + "description": "Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\n" + }, + "nearRealTimeLiveRuleEligible": { + "type": "boolean", + "description": "Output only. Indicate the rule can run in near real time live rule.\nIf this is true, the rule uses the near real time live rule when the run\nfrequency is set to LIVE.\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 + }, + "referenceLists": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. Resource names of the reference lists used in this rule.\nPopulated in FULL view.\n" + }, + "revisionCreateTime": { + "type": "string", + "description": "Output only. The timestamp of when the rule revision was created.\nPopulated in FULL, REVISION_METADATA_ONLY views.\n" + }, + "revisionId": { + "type": "string", + "description": "Output only. The revision ID of the rule.\nA new revision is created whenever the rule text is changed in any way.\nFormat: v_{10 digits}_{9 digits}\nPopulated in REVISION_METADATA_ONLY view and FULL view.\n" + }, + "ruleId": { + "type": "string", + "description": "Rule Id is the ID of the Rule.\n" + }, + "scope": { + "type": "string", + "description": "Resource name of the DataAccessScope bound to this rule.\nPopulated in BASIC view and FULL view.\nIf reference lists are used in the rule, validations will be performed\nagainst this scope to ensure that the reference lists are compatible with\nboth the user's and the rule's scopes.\nThe scope should be in the format:\n\"projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}\".\n" + }, + "severities": { + "type": "array", + "items": { + "$ref": "#/types/gcp:chronicle/RuleSeverity:RuleSeverity" + }, + "description": "(Output)\nOutput only. The severity of a rule's compilation diagnostic.\nPossible values:\nSEVERITY_UNSPECIFIED\nWARNING\nERROR\n" + }, + "text": { + "type": "string", + "description": "The YARA-L content of the rule.\nPopulated in FULL view.\n" + }, + "type": { + "type": "string", + "description": "Possible values:\nRULE_TYPE_UNSPECIFIED\nSINGLE_EVENT\nMULTI_EVENT\n" + } + }, + "type": "object" + } + }, + "gcp:chronicle/ruleDeployment:RuleDeployment": { + "description": "## Example Usage\n\n## Import\n\nRuleDeployment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment`\n\n* `{{project}}/{{location}}/{{instance}}/{{rule}}`\n\n* `{{location}}/{{instance}}/{{rule}}`\n\nWhen using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment\n```\n\n```sh\n$ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}}\n```\n\n", + "properties": { + "alerting": { + "type": "boolean", + "description": "Whether detections resulting from this deployment should be considered\nalerts.\n" + }, + "archiveTime": { + "type": "string", + "description": "Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty.\n" + }, + "archived": { + "type": "boolean", + "description": "The archive state of the rule deployment.\nCannot be set to true unless enabled is set to false.\nIf set to true, alerting will automatically be set to false.\nIf currently set to true, enabled, alerting, and run_frequency cannot be\nupdated.\n" + }, + "consumerRules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The names of the associated/chained consumer rules. Rules are considered\nconsumers of this rule if their rule text explicitly filters on this rule's ruleid.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the rule is currently deployed continuously against incoming data.\n" + }, + "executionState": { + "type": "string", + "description": "The execution state of the rule deployment.\nPossible values:\nDEFAULT\nLIMITED\nPAUSED\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n" + }, + "lastAlertStatusChangeTime": { + "type": "string", + "description": "Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false.\n" + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n" + }, + "name": { + "type": "string", + "description": "The resource name of the rule deployment.\nNote that RuleDeployment is a child of the overall Rule, not any individual\nrevision, so the resource ID segment for the Rule resource must not\nreference a specific revision.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment\n" + }, + "producerRules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The names of the associated/chained producer rules. Rules are considered\nproducers for this rule if this rule explicitly filters on their ruleid.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\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" + }, + "rule": { + "type": "string", + "description": "The Rule ID of the rule.\n\n\n- - -\n" + }, + "runFrequency": { + "type": "string", + "description": "The run frequency of the rule deployment.\nPossible values:\nLIVE\nHOURLY\nDAILY\n" + } + }, + "required": [ + "archiveTime", + "consumerRules", + "executionState", + "instance", + "lastAlertStatusChangeTime", + "location", + "name", + "producerRules", + "project", + "rule" + ], + "inputProperties": { + "alerting": { + "type": "boolean", + "description": "Whether detections resulting from this deployment should be considered\nalerts.\n" + }, + "archived": { + "type": "boolean", + "description": "The archive state of the rule deployment.\nCannot be set to true unless enabled is set to false.\nIf set to true, alerting will automatically be set to false.\nIf currently set to true, enabled, alerting, and run_frequency cannot be\nupdated.\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the rule is currently deployed continuously against incoming data.\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\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 + }, + "rule": { + "type": "string", + "description": "The Rule ID of the rule.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "runFrequency": { + "type": "string", + "description": "The run frequency of the rule deployment.\nPossible values:\nLIVE\nHOURLY\nDAILY\n" + } + }, + "requiredInputs": [ + "instance", + "location", + "rule" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering RuleDeployment resources.\n", + "properties": { + "alerting": { + "type": "boolean", + "description": "Whether detections resulting from this deployment should be considered\nalerts.\n" + }, + "archiveTime": { + "type": "string", + "description": "Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty.\n" + }, + "archived": { + "type": "boolean", + "description": "The archive state of the rule deployment.\nCannot be set to true unless enabled is set to false.\nIf set to true, alerting will automatically be set to false.\nIf currently set to true, enabled, alerting, and run_frequency cannot be\nupdated.\n" + }, + "consumerRules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The names of the associated/chained consumer rules. Rules are considered\nconsumers of this rule if their rule text explicitly filters on this rule's ruleid.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the rule is currently deployed continuously against incoming data.\n" + }, + "executionState": { + "type": "string", + "description": "The execution state of the rule deployment.\nPossible values:\nDEFAULT\nLIMITED\nPAUSED\n" + }, + "instance": { + "type": "string", + "description": "The unique identifier for the Chronicle instance, which is the same as the customer ID.\n", + "willReplaceOnChanges": true + }, + "lastAlertStatusChangeTime": { + "type": "string", + "description": "Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false.\n" + }, + "location": { + "type": "string", + "description": "The location of the resource. This is the geographical region where the Chronicle instance resides, such as \"us\" or \"europe-west2\".\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The resource name of the rule deployment.\nNote that RuleDeployment is a child of the overall Rule, not any individual\nrevision, so the resource ID segment for the Rule resource must not\nreference a specific revision.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment\n" + }, + "producerRules": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Output only. The names of the associated/chained producer rules. Rules are considered\nproducers for this rule if this rule explicitly filters on their ruleid.\nFormat:\nprojects/{project}/locations/{location}/instances/{instance}/rules/{rule}\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 + }, + "rule": { + "type": "string", + "description": "The Rule ID of the rule.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "runFrequency": { + "type": "string", + "description": "The run frequency of the rule deployment.\nPossible values:\nLIVE\nHOURLY\nDAILY\n" + } + }, + "type": "object" + } + }, "gcp:chronicle/watchlist:Watchlist": { "description": "## Example Usage\n\n### Chronicle Watchlist 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.chronicle.Watchlist(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n watchlistId: \"watchlist-id\",\n description: \"watchlist-description\",\n displayName: \"watchlist_name\",\n multiplyingFactor: 1,\n entityPopulationMechanism: {\n manual: {},\n },\n watchlistUserPreferences: {\n pinned: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.chronicle.Watchlist(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n watchlist_id=\"watchlist-id\",\n description=\"watchlist-description\",\n display_name=\"watchlist_name\",\n multiplying_factor=1,\n entity_population_mechanism={\n \"manual\": {},\n },\n watchlist_user_preferences={\n \"pinned\": 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 example = new Gcp.Chronicle.Watchlist(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n WatchlistId = \"watchlist-id\",\n Description = \"watchlist-description\",\n DisplayName = \"watchlist_name\",\n MultiplyingFactor = 1,\n EntityPopulationMechanism = new Gcp.Chronicle.Inputs.WatchlistEntityPopulationMechanismArgs\n {\n Manual = null,\n },\n WatchlistUserPreferences = new Gcp.Chronicle.Inputs.WatchlistWatchlistUserPreferencesArgs\n {\n Pinned = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewWatchlist(ctx, \"example\", \u0026chronicle.WatchlistArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tWatchlistId: pulumi.String(\"watchlist-id\"),\n\t\t\tDescription: pulumi.String(\"watchlist-description\"),\n\t\t\tDisplayName: pulumi.String(\"watchlist_name\"),\n\t\t\tMultiplyingFactor: pulumi.Float64(1),\n\t\t\tEntityPopulationMechanism: \u0026chronicle.WatchlistEntityPopulationMechanismArgs{\n\t\t\t\tManual: \u0026chronicle.WatchlistEntityPopulationMechanismManualArgs{},\n\t\t\t},\n\t\t\tWatchlistUserPreferences: \u0026chronicle.WatchlistWatchlistUserPreferencesArgs{\n\t\t\t\tPinned: 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.chronicle.Watchlist;\nimport com.pulumi.gcp.chronicle.WatchlistArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistEntityPopulationMechanismArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistEntityPopulationMechanismManualArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistWatchlistUserPreferencesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Watchlist(\"example\", WatchlistArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .watchlistId(\"watchlist-id\")\n .description(\"watchlist-description\")\n .displayName(\"watchlist_name\")\n .multiplyingFactor(1)\n .entityPopulationMechanism(WatchlistEntityPopulationMechanismArgs.builder()\n .manual()\n .build())\n .watchlistUserPreferences(WatchlistWatchlistUserPreferencesArgs.builder()\n .pinned(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:chronicle:Watchlist\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n watchlistId: watchlist-id\n description: watchlist-description\n displayName: watchlist_name\n multiplyingFactor: 1\n entityPopulationMechanism:\n manual: {}\n watchlistUserPreferences:\n pinned: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Chronicle Watchlist Without Id\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.chronicle.Watchlist(\"example\", {\n location: \"us\",\n instance: \"00000000-0000-0000-0000-000000000000\",\n description: \"watchlist-description\",\n displayName: \"watchlist-name\",\n multiplyingFactor: 1,\n entityPopulationMechanism: {\n manual: {},\n },\n watchlistUserPreferences: {\n pinned: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.chronicle.Watchlist(\"example\",\n location=\"us\",\n instance=\"00000000-0000-0000-0000-000000000000\",\n description=\"watchlist-description\",\n display_name=\"watchlist-name\",\n multiplying_factor=1,\n entity_population_mechanism={\n \"manual\": {},\n },\n watchlist_user_preferences={\n \"pinned\": 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 example = new Gcp.Chronicle.Watchlist(\"example\", new()\n {\n Location = \"us\",\n Instance = \"00000000-0000-0000-0000-000000000000\",\n Description = \"watchlist-description\",\n DisplayName = \"watchlist-name\",\n MultiplyingFactor = 1,\n EntityPopulationMechanism = new Gcp.Chronicle.Inputs.WatchlistEntityPopulationMechanismArgs\n {\n Manual = null,\n },\n WatchlistUserPreferences = new Gcp.Chronicle.Inputs.WatchlistWatchlistUserPreferencesArgs\n {\n Pinned = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronicle.NewWatchlist(ctx, \"example\", \u0026chronicle.WatchlistArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t\tInstance: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tDescription: pulumi.String(\"watchlist-description\"),\n\t\t\tDisplayName: pulumi.String(\"watchlist-name\"),\n\t\t\tMultiplyingFactor: pulumi.Float64(1),\n\t\t\tEntityPopulationMechanism: \u0026chronicle.WatchlistEntityPopulationMechanismArgs{\n\t\t\t\tManual: \u0026chronicle.WatchlistEntityPopulationMechanismManualArgs{},\n\t\t\t},\n\t\t\tWatchlistUserPreferences: \u0026chronicle.WatchlistWatchlistUserPreferencesArgs{\n\t\t\t\tPinned: 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.chronicle.Watchlist;\nimport com.pulumi.gcp.chronicle.WatchlistArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistEntityPopulationMechanismArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistEntityPopulationMechanismManualArgs;\nimport com.pulumi.gcp.chronicle.inputs.WatchlistWatchlistUserPreferencesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Watchlist(\"example\", WatchlistArgs.builder()\n .location(\"us\")\n .instance(\"00000000-0000-0000-0000-000000000000\")\n .description(\"watchlist-description\")\n .displayName(\"watchlist-name\")\n .multiplyingFactor(1)\n .entityPopulationMechanism(WatchlistEntityPopulationMechanismArgs.builder()\n .manual()\n .build())\n .watchlistUserPreferences(WatchlistWatchlistUserPreferencesArgs.builder()\n .pinned(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:chronicle:Watchlist\n properties:\n location: us\n instance: 00000000-0000-0000-0000-000000000000\n description: watchlist-description\n displayName: watchlist-name\n multiplyingFactor: 1\n entityPopulationMechanism:\n manual: {}\n watchlistUserPreferences:\n pinned: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWatchlist can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance}}/watchlists/{{watchlist_id}}`\n\n* `{{project}}/{{location}}/{{instance}}/{{watchlist_id}}`\n\n* `{{location}}/{{instance}}/{{watchlist_id}}`\n\nWhen using the `pulumi import` command, Watchlist can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:chronicle/watchlist:Watchlist default projects/{{project}}/locations/{{location}}/instances/{{instance}}/watchlists/{{watchlist_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/watchlist:Watchlist default {{project}}/{{location}}/{{instance}}/{{watchlist_id}}\n```\n\n```sh\n$ pulumi import gcp:chronicle/watchlist:Watchlist default {{location}}/{{instance}}/{{watchlist_id}}\n```\n\n", "properties": { @@ -162988,6 +164218,280 @@ "type": "object" } }, + "gcp:colab/runtimeTemplate:RuntimeTemplate": { + "description": "'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM,\n as well as common settings such as the network and whether public internet access is enabled. When you create\n a runtime, its VM is created according to the specifications of a runtime template.'\n\n\nTo get more information about RuntimeTemplate, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates)\n* How-to Guides\n * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template)\n\n## Example Usage\n\n### Colab Runtime Template Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst runtime_template = new gcp.colab.RuntimeTemplate(\"runtime-template\", {\n name: \"colab-runtime-template\",\n displayName: \"Runtime template basic\",\n location: \"us-central1\",\n machineSpec: {\n machineType: \"e2-standard-4\",\n },\n networkSpec: {\n enableInternetAccess: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nruntime_template = gcp.colab.RuntimeTemplate(\"runtime-template\",\n name=\"colab-runtime-template\",\n display_name=\"Runtime template basic\",\n location=\"us-central1\",\n machine_spec={\n \"machine_type\": \"e2-standard-4\",\n },\n network_spec={\n \"enable_internet_access\": 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 runtime_template = new Gcp.Colab.RuntimeTemplate(\"runtime-template\", new()\n {\n Name = \"colab-runtime-template\",\n DisplayName = \"Runtime template basic\",\n Location = \"us-central1\",\n MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs\n {\n MachineType = \"e2-standard-4\",\n },\n NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs\n {\n EnableInternetAccess = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := colab.NewRuntimeTemplate(ctx, \"runtime-template\", \u0026colab.RuntimeTemplateArgs{\n\t\t\tName: pulumi.String(\"colab-runtime-template\"),\n\t\t\tDisplayName: pulumi.String(\"Runtime template basic\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tMachineSpec: \u0026colab.RuntimeTemplateMachineSpecArgs{\n\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t},\n\t\t\tNetworkSpec: \u0026colab.RuntimeTemplateNetworkSpecArgs{\n\t\t\t\tEnableInternetAccess: 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.colab.RuntimeTemplate;\nimport com.pulumi.gcp.colab.RuntimeTemplateArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var runtime_template = new RuntimeTemplate(\"runtime-template\", RuntimeTemplateArgs.builder()\n .name(\"colab-runtime-template\")\n .displayName(\"Runtime template basic\")\n .location(\"us-central1\")\n .machineSpec(RuntimeTemplateMachineSpecArgs.builder()\n .machineType(\"e2-standard-4\")\n .build())\n .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()\n .enableInternetAccess(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n runtime-template:\n type: gcp:colab:RuntimeTemplate\n properties:\n name: colab-runtime-template\n displayName: Runtime template basic\n location: us-central1\n machineSpec:\n machineType: e2-standard-4\n networkSpec:\n enableInternetAccess: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Colab Runtime Template No Name\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst runtime_template = new gcp.colab.RuntimeTemplate(\"runtime-template\", {\n displayName: \"Runtime template no name\",\n location: \"us-central1\",\n machineSpec: {\n machineType: \"e2-standard-4\",\n },\n networkSpec: {\n enableInternetAccess: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nruntime_template = gcp.colab.RuntimeTemplate(\"runtime-template\",\n display_name=\"Runtime template no name\",\n location=\"us-central1\",\n machine_spec={\n \"machine_type\": \"e2-standard-4\",\n },\n network_spec={\n \"enable_internet_access\": 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 runtime_template = new Gcp.Colab.RuntimeTemplate(\"runtime-template\", new()\n {\n DisplayName = \"Runtime template no name\",\n Location = \"us-central1\",\n MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs\n {\n MachineType = \"e2-standard-4\",\n },\n NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs\n {\n EnableInternetAccess = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := colab.NewRuntimeTemplate(ctx, \"runtime-template\", \u0026colab.RuntimeTemplateArgs{\n\t\t\tDisplayName: pulumi.String(\"Runtime template no name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tMachineSpec: \u0026colab.RuntimeTemplateMachineSpecArgs{\n\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t},\n\t\t\tNetworkSpec: \u0026colab.RuntimeTemplateNetworkSpecArgs{\n\t\t\t\tEnableInternetAccess: 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.colab.RuntimeTemplate;\nimport com.pulumi.gcp.colab.RuntimeTemplateArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var runtime_template = new RuntimeTemplate(\"runtime-template\", RuntimeTemplateArgs.builder()\n .displayName(\"Runtime template no name\")\n .location(\"us-central1\")\n .machineSpec(RuntimeTemplateMachineSpecArgs.builder()\n .machineType(\"e2-standard-4\")\n .build())\n .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()\n .enableInternetAccess(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n runtime-template:\n type: gcp:colab:RuntimeTemplate\n properties:\n displayName: Runtime template no name\n location: us-central1\n machineSpec:\n machineType: e2-standard-4\n networkSpec:\n enableInternetAccess: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Colab Runtime Template Full\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: \"colab-test-default\",\n autoCreateSubnetworks: false,\n});\nconst mySubnetwork = new gcp.compute.Subnetwork(\"my_subnetwork\", {\n name: \"colab-test-default\",\n network: myNetwork.id,\n region: \"us-central1\",\n ipCidrRange: \"10.0.1.0/24\",\n});\nconst runtime_template = new gcp.colab.RuntimeTemplate(\"runtime-template\", {\n name: \"colab-runtime-template\",\n displayName: \"Runtime template full\",\n location: \"us-central1\",\n description: \"Full runtime template\",\n machineSpec: {\n machineType: \"n1-standard-2\",\n acceleratorType: \"NVIDIA_TESLA_T4\",\n acceleratorCount: 1,\n },\n dataPersistentDiskSpec: {\n diskType: \"pd-standard\",\n diskSizeGb: \"200\",\n },\n networkSpec: {\n enableInternetAccess: true,\n network: myNetwork.id,\n subnetwork: mySubnetwork.id,\n },\n labels: {\n k: \"val\",\n },\n idleShutdownConfig: {\n idleTimeout: \"3600s\",\n },\n eucConfig: {\n eucDisabled: true,\n },\n shieldedVmConfig: {\n enableSecureBoot: true,\n },\n networkTags: [\n \"abc\",\n \"def\",\n ],\n encryptionSpec: {\n kmsKeyName: \"my-crypto-key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.Network(\"my_network\",\n name=\"colab-test-default\",\n auto_create_subnetworks=False)\nmy_subnetwork = gcp.compute.Subnetwork(\"my_subnetwork\",\n name=\"colab-test-default\",\n network=my_network.id,\n region=\"us-central1\",\n ip_cidr_range=\"10.0.1.0/24\")\nruntime_template = gcp.colab.RuntimeTemplate(\"runtime-template\",\n name=\"colab-runtime-template\",\n display_name=\"Runtime template full\",\n location=\"us-central1\",\n description=\"Full runtime template\",\n machine_spec={\n \"machine_type\": \"n1-standard-2\",\n \"accelerator_type\": \"NVIDIA_TESLA_T4\",\n \"accelerator_count\": 1,\n },\n data_persistent_disk_spec={\n \"disk_type\": \"pd-standard\",\n \"disk_size_gb\": \"200\",\n },\n network_spec={\n \"enable_internet_access\": True,\n \"network\": my_network.id,\n \"subnetwork\": my_subnetwork.id,\n },\n labels={\n \"k\": \"val\",\n },\n idle_shutdown_config={\n \"idle_timeout\": \"3600s\",\n },\n euc_config={\n \"euc_disabled\": True,\n },\n shielded_vm_config={\n \"enable_secure_boot\": True,\n },\n network_tags=[\n \"abc\",\n \"def\",\n ],\n encryption_spec={\n \"kms_key_name\": \"my-crypto-key\",\n })\n```\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 = \"colab-test-default\",\n AutoCreateSubnetworks = false,\n });\n\n var mySubnetwork = new Gcp.Compute.Subnetwork(\"my_subnetwork\", new()\n {\n Name = \"colab-test-default\",\n Network = myNetwork.Id,\n Region = \"us-central1\",\n IpCidrRange = \"10.0.1.0/24\",\n });\n\n var runtime_template = new Gcp.Colab.RuntimeTemplate(\"runtime-template\", new()\n {\n Name = \"colab-runtime-template\",\n DisplayName = \"Runtime template full\",\n Location = \"us-central1\",\n Description = \"Full runtime template\",\n MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs\n {\n MachineType = \"n1-standard-2\",\n AcceleratorType = \"NVIDIA_TESLA_T4\",\n AcceleratorCount = 1,\n },\n DataPersistentDiskSpec = new Gcp.Colab.Inputs.RuntimeTemplateDataPersistentDiskSpecArgs\n {\n DiskType = \"pd-standard\",\n DiskSizeGb = \"200\",\n },\n NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs\n {\n EnableInternetAccess = true,\n Network = myNetwork.Id,\n Subnetwork = mySubnetwork.Id,\n },\n Labels = \n {\n { \"k\", \"val\" },\n },\n IdleShutdownConfig = new Gcp.Colab.Inputs.RuntimeTemplateIdleShutdownConfigArgs\n {\n IdleTimeout = \"3600s\",\n },\n EucConfig = new Gcp.Colab.Inputs.RuntimeTemplateEucConfigArgs\n {\n EucDisabled = true,\n },\n ShieldedVmConfig = new Gcp.Colab.Inputs.RuntimeTemplateShieldedVmConfigArgs\n {\n EnableSecureBoot = true,\n },\n NetworkTags = new[]\n {\n \"abc\",\n \"def\",\n },\n EncryptionSpec = new Gcp.Colab.Inputs.RuntimeTemplateEncryptionSpecArgs\n {\n KmsKeyName = \"my-crypto-key\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyNetwork, err := compute.NewNetwork(ctx, \"my_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"colab-test-default\"),\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(\"colab-test-default\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.1.0/24\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = colab.NewRuntimeTemplate(ctx, \"runtime-template\", \u0026colab.RuntimeTemplateArgs{\n\t\t\tName: pulumi.String(\"colab-runtime-template\"),\n\t\t\tDisplayName: pulumi.String(\"Runtime template full\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"Full runtime template\"),\n\t\t\tMachineSpec: \u0026colab.RuntimeTemplateMachineSpecArgs{\n\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\tAcceleratorType: pulumi.String(\"NVIDIA_TESLA_T4\"),\n\t\t\t\tAcceleratorCount: pulumi.Int(1),\n\t\t\t},\n\t\t\tDataPersistentDiskSpec: \u0026colab.RuntimeTemplateDataPersistentDiskSpecArgs{\n\t\t\t\tDiskType: pulumi.String(\"pd-standard\"),\n\t\t\t\tDiskSizeGb: pulumi.String(\"200\"),\n\t\t\t},\n\t\t\tNetworkSpec: \u0026colab.RuntimeTemplateNetworkSpecArgs{\n\t\t\t\tEnableInternetAccess: pulumi.Bool(true),\n\t\t\t\tNetwork: myNetwork.ID(),\n\t\t\t\tSubnetwork: mySubnetwork.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"k\": pulumi.String(\"val\"),\n\t\t\t},\n\t\t\tIdleShutdownConfig: \u0026colab.RuntimeTemplateIdleShutdownConfigArgs{\n\t\t\t\tIdleTimeout: pulumi.String(\"3600s\"),\n\t\t\t},\n\t\t\tEucConfig: \u0026colab.RuntimeTemplateEucConfigArgs{\n\t\t\t\tEucDisabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tShieldedVmConfig: \u0026colab.RuntimeTemplateShieldedVmConfigArgs{\n\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t},\n\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"abc\"),\n\t\t\t\tpulumi.String(\"def\"),\n\t\t\t},\n\t\t\tEncryptionSpec: \u0026colab.RuntimeTemplateEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"my-crypto-key\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.colab.RuntimeTemplate;\nimport com.pulumi.gcp.colab.RuntimeTemplateArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateDataPersistentDiskSpecArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateIdleShutdownConfigArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateEucConfigArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateShieldedVmConfigArgs;\nimport com.pulumi.gcp.colab.inputs.RuntimeTemplateEncryptionSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(\"colab-test-default\")\n .autoCreateSubnetworks(false)\n .build());\n\n var mySubnetwork = new Subnetwork(\"mySubnetwork\", SubnetworkArgs.builder()\n .name(\"colab-test-default\")\n .network(myNetwork.id())\n .region(\"us-central1\")\n .ipCidrRange(\"10.0.1.0/24\")\n .build());\n\n var runtime_template = new RuntimeTemplate(\"runtime-template\", RuntimeTemplateArgs.builder()\n .name(\"colab-runtime-template\")\n .displayName(\"Runtime template full\")\n .location(\"us-central1\")\n .description(\"Full runtime template\")\n .machineSpec(RuntimeTemplateMachineSpecArgs.builder()\n .machineType(\"n1-standard-2\")\n .acceleratorType(\"NVIDIA_TESLA_T4\")\n .acceleratorCount(\"1\")\n .build())\n .dataPersistentDiskSpec(RuntimeTemplateDataPersistentDiskSpecArgs.builder()\n .diskType(\"pd-standard\")\n .diskSizeGb(200)\n .build())\n .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()\n .enableInternetAccess(true)\n .network(myNetwork.id())\n .subnetwork(mySubnetwork.id())\n .build())\n .labels(Map.of(\"k\", \"val\"))\n .idleShutdownConfig(RuntimeTemplateIdleShutdownConfigArgs.builder()\n .idleTimeout(\"3600s\")\n .build())\n .eucConfig(RuntimeTemplateEucConfigArgs.builder()\n .eucDisabled(true)\n .build())\n .shieldedVmConfig(RuntimeTemplateShieldedVmConfigArgs.builder()\n .enableSecureBoot(true)\n .build())\n .networkTags( \n \"abc\",\n \"def\")\n .encryptionSpec(RuntimeTemplateEncryptionSpecArgs.builder()\n .kmsKeyName(\"my-crypto-key\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myNetwork:\n type: gcp:compute:Network\n name: my_network\n properties:\n name: colab-test-default\n autoCreateSubnetworks: false\n mySubnetwork:\n type: gcp:compute:Subnetwork\n name: my_subnetwork\n properties:\n name: colab-test-default\n network: ${myNetwork.id}\n region: us-central1\n ipCidrRange: 10.0.1.0/24\n runtime-template:\n type: gcp:colab:RuntimeTemplate\n properties:\n name: colab-runtime-template\n displayName: Runtime template full\n location: us-central1\n description: Full runtime template\n machineSpec:\n machineType: n1-standard-2\n acceleratorType: NVIDIA_TESLA_T4\n acceleratorCount: '1'\n dataPersistentDiskSpec:\n diskType: pd-standard\n diskSizeGb: 200\n networkSpec:\n enableInternetAccess: true\n network: ${myNetwork.id}\n subnetwork: ${mySubnetwork.id}\n labels:\n k: val\n idleShutdownConfig:\n idleTimeout: 3600s\n eucConfig:\n eucDisabled: true\n shieldedVmConfig:\n enableSecureBoot: true\n networkTags:\n - abc\n - def\n encryptionSpec:\n kmsKeyName: my-crypto-key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRuntimeTemplate can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}\n```\n\n```sh\n$ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}}\n```\n\n", + "properties": { + "dataPersistentDiskSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateDataPersistentDiskSpec:RuntimeTemplateDataPersistentDiskSpec", + "description": "The configuration for the data disk of the runtime.\nStructure is documented below.\n" + }, + "description": { + "type": "string", + "description": "The description of the Runtime Template.\n" + }, + "displayName": { + "type": "string", + "description": "Required. The display name of the Runtime Template.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "encryptionSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEncryptionSpec:RuntimeTemplateEncryptionSpec", + "description": "Customer-managed encryption key spec for the notebook runtime.\nStructure is documented below.\n" + }, + "eucConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEucConfig:RuntimeTemplateEucConfig", + "description": "EUC configuration of the NotebookRuntimeTemplate.\nStructure is documented below.\n" + }, + "idleShutdownConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateIdleShutdownConfig:RuntimeTemplateIdleShutdownConfig", + "description": "Notebook Idle Shutdown configuration for the runtime.\nStructure is documented below.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels to identify and group the runtime template.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource: https://cloud.google.com/colab/docs/locations\n\n\n- - -\n" + }, + "machineSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateMachineSpec:RuntimeTemplateMachineSpec", + "description": "'The machine configuration of the runtime.'\nStructure is documented below.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Runtime Template\n" + }, + "networkSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateNetworkSpec:RuntimeTemplateNetworkSpec", + "description": "The network configuration for the runtime.\nStructure is documented below.\n" + }, + "networkTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Applies the given Compute Engine tags to the runtime.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "shieldedVmConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateShieldedVmConfig:RuntimeTemplateShieldedVmConfig", + "description": "Runtime Shielded VM spec.\nStructure is documented below.\n" + } + }, + "required": [ + "dataPersistentDiskSpec", + "displayName", + "effectiveLabels", + "idleShutdownConfig", + "location", + "machineSpec", + "name", + "networkSpec", + "project", + "pulumiLabels" + ], + "inputProperties": { + "dataPersistentDiskSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateDataPersistentDiskSpec:RuntimeTemplateDataPersistentDiskSpec", + "description": "The configuration for the data disk of the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "description": { + "type": "string", + "description": "The description of the Runtime Template.\n", + "willReplaceOnChanges": true + }, + "displayName": { + "type": "string", + "description": "Required. The display name of the Runtime Template.\n", + "willReplaceOnChanges": true + }, + "encryptionSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEncryptionSpec:RuntimeTemplateEncryptionSpec", + "description": "Customer-managed encryption key spec for the notebook runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "eucConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEucConfig:RuntimeTemplateEucConfig", + "description": "EUC configuration of the NotebookRuntimeTemplate.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "idleShutdownConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateIdleShutdownConfig:RuntimeTemplateIdleShutdownConfig", + "description": "Notebook Idle Shutdown configuration for the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels to identify and group the runtime template.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource: https://cloud.google.com/colab/docs/locations\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "machineSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateMachineSpec:RuntimeTemplateMachineSpec", + "description": "'The machine configuration of the runtime.'\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The resource name of the Runtime Template\n", + "willReplaceOnChanges": true + }, + "networkSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateNetworkSpec:RuntimeTemplateNetworkSpec", + "description": "The network configuration for the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "networkTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Applies the given Compute Engine tags to the runtime.\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 + }, + "shieldedVmConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateShieldedVmConfig:RuntimeTemplateShieldedVmConfig", + "description": "Runtime Shielded VM spec.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "displayName", + "location" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering RuntimeTemplate resources.\n", + "properties": { + "dataPersistentDiskSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateDataPersistentDiskSpec:RuntimeTemplateDataPersistentDiskSpec", + "description": "The configuration for the data disk of the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "description": { + "type": "string", + "description": "The description of the Runtime Template.\n", + "willReplaceOnChanges": true + }, + "displayName": { + "type": "string", + "description": "Required. The display name of the Runtime Template.\n", + "willReplaceOnChanges": true + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true, + "willReplaceOnChanges": true + }, + "encryptionSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEncryptionSpec:RuntimeTemplateEncryptionSpec", + "description": "Customer-managed encryption key spec for the notebook runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "eucConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateEucConfig:RuntimeTemplateEucConfig", + "description": "EUC configuration of the NotebookRuntimeTemplate.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "idleShutdownConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateIdleShutdownConfig:RuntimeTemplateIdleShutdownConfig", + "description": "Notebook Idle Shutdown configuration for the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels to identify and group the runtime template.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource: https://cloud.google.com/colab/docs/locations\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "machineSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateMachineSpec:RuntimeTemplateMachineSpec", + "description": "'The machine configuration of the runtime.'\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The resource name of the Runtime Template\n", + "willReplaceOnChanges": true + }, + "networkSpec": { + "$ref": "#/types/gcp:colab/RuntimeTemplateNetworkSpec:RuntimeTemplateNetworkSpec", + "description": "The network configuration for the runtime.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "networkTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Applies the given Compute Engine tags to the runtime.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "shieldedVmConfig": { + "$ref": "#/types/gcp:colab/RuntimeTemplateShieldedVmConfig:RuntimeTemplateShieldedVmConfig", + "description": "Runtime Shielded VM spec.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:composer/environment:Environment": { "description": "\n\n## Import\n\nEnvironment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/environments/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Environment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:composer/environment:Environment default projects/{{project}}/locations/{{region}}/environments/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/environment:Environment default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/environment:Environment default {{name}}\n```\n\n", "properties": { @@ -174030,7 +175534,7 @@ }, "bandwidth": { "type": "string", - "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`.\n" + "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`.\n" }, "candidateSubnets": { "type": "array", @@ -174176,7 +175680,7 @@ }, "bandwidth": { "type": "string", - "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`.\n" + "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`.\n" }, "candidateSubnets": { "type": "array", @@ -174268,7 +175772,7 @@ }, "bandwidth": { "type": "string", - "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`.\n" + "description": "Provisioned bandwidth capacity for the interconnect attachment.\nFor attachments of type DEDICATED, the user can set the bandwidth.\nFor attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth.\nOutput only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,\nDefaults to BPS_10G\nPossible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`.\n" }, "candidateSubnets": { "type": "array", @@ -184648,7 +186152,7 @@ }, "nextHopInterRegionCost": { "type": "string", - "description": "Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance,\ndistance, and available bandwidth between regions.\n" + "description": "Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions.\n" }, "nextHopIp": { "type": "string", @@ -184664,7 +186168,7 @@ }, "nextHopOrigin": { "type": "string", - "description": "Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or\nINCOMPLETE.\n" + "description": "Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE.\n" }, "nextHopVpnTunnel": { "type": "string", @@ -184822,7 +186326,7 @@ }, "nextHopInterRegionCost": { "type": "string", - "description": "Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance,\ndistance, and available bandwidth between regions.\n" + "description": "Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions.\n" }, "nextHopIp": { "type": "string", @@ -184839,7 +186343,7 @@ }, "nextHopOrigin": { "type": "string", - "description": "Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or\nINCOMPLETE.\n" + "description": "Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE.\n" }, "nextHopVpnTunnel": { "type": "string", @@ -188030,7 +189534,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`.\n" + "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`.\n" }, "subnetworkId": { "type": "integer", @@ -188140,7 +189644,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`.\n" + "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`.\n" } }, "requiredInputs": [ @@ -188255,7 +189759,7 @@ }, "stackType": { "type": "string", - "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`.\n" + "description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`.\n" }, "subnetworkId": { "type": "integer", @@ -189083,7 +190587,7 @@ } }, "gcp:compute/targetInstance:TargetInstance": { - "description": "Represents a TargetInstance resource which defines an endpoint instance\nthat terminates traffic of certain protocols. In particular, they are used\nin Protocol Forwarding, where forwarding rules can send packets to a\nnon-NAT'ed target instance. Each target instance contains a single\nvirtual machine instance that receives and handles traffic from the\ncorresponding forwarding rules.\n\n\nTo get more information about TargetInstance, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/targetInstances)\n* How-to Guides\n * [Using Protocol Forwarding](https://cloud.google.com/compute/docs/protocol-forwarding)\n\n## Example Usage\n\n### Target Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vmimage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst target_vm = new gcp.compute.Instance(\"target-vm\", {\n name: \"target-vm\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst _default = new gcp.compute.TargetInstance(\"default\", {\n name: \"target\",\n instance: target_vm.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvmimage = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\ntarget_vm = gcp.compute.Instance(\"target-vm\",\n name=\"target-vm\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }])\ndefault = gcp.compute.TargetInstance(\"default\",\n name=\"target\",\n instance=target_vm.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 vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var target_vm = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n Name = \"target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var @default = new Gcp.Compute.TargetInstance(\"default\", new()\n {\n Name = \"target\",\n Instance = target_vm.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"default\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"target\"),\n\t\t\tInstance: target_vm.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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vm = new Instance(\"target-vm\", InstanceArgs.builder()\n .name(\"target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var default_ = new TargetInstance(\"default\", TargetInstanceArgs.builder()\n .name(\"target\")\n .instance(target_vm.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:TargetInstance\n properties:\n name: target\n instance: ${[\"target-vm\"].id}\n target-vm:\n type: gcp:compute:Instance\n properties:\n name: target-vm\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n networkInterfaces:\n - network: default\nvariables:\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Target Instance Custom Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst target-vm = gcp.compute.getNetwork({\n name: \"default\",\n});\nconst vmimage = gcp.compute.getImage({\n family: \"debian-12\",\n project: \"debian-cloud\",\n});\nconst target_vmInstance = new gcp.compute.Instance(\"target-vm\", {\n name: \"custom-network-target-vm\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst customNetwork = new gcp.compute.TargetInstance(\"custom_network\", {\n name: \"custom-network\",\n instance: target_vmInstance.id,\n network: target_vm.then(target_vm =\u003e target_vm.selfLink),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_vm = gcp.compute.get_network(name=\"default\")\nvmimage = gcp.compute.get_image(family=\"debian-12\",\n project=\"debian-cloud\")\ntarget_vm_instance = gcp.compute.Instance(\"target-vm\",\n name=\"custom-network-target-vm\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }])\ncustom_network = gcp.compute.TargetInstance(\"custom_network\",\n name=\"custom-network\",\n instance=target_vm_instance.id,\n network=target_vm.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var target_vm = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"default\",\n });\n\n var vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-12\",\n Project = \"debian-cloud\",\n });\n\n var target_vmInstance = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n Name = \"custom-network-target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var customNetwork = new Gcp.Compute.TargetInstance(\"custom_network\", new()\n {\n Name = \"custom-network\",\n Instance = target_vmInstance.Id,\n Network = target_vm.Apply(target_vm =\u003e target_vm.Apply(getNetworkResult =\u003e getNetworkResult.SelfLink)),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttarget_vm, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-12\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"custom-network-target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"custom_network\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"custom-network\"),\n\t\t\tInstance: target_vmInstance.ID(),\n\t\t\tNetwork: pulumi.String(target_vm.SelfLink),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 target-vm = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"default\")\n .build());\n\n final var vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-12\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vmInstance = new Instance(\"target-vmInstance\", InstanceArgs.builder()\n .name(\"custom-network-target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var customNetwork = new TargetInstance(\"customNetwork\", TargetInstanceArgs.builder()\n .name(\"custom-network\")\n .instance(target_vmInstance.id())\n .network(target_vm.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customNetwork:\n type: gcp:compute:TargetInstance\n name: custom_network\n properties:\n name: custom-network\n instance: ${[\"target-vmInstance\"].id}\n network: ${[\"target-vm\"].selfLink}\n target-vmInstance:\n type: gcp:compute:Instance\n name: target-vm\n properties:\n name: custom-network-target-vm\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n networkInterfaces:\n - network: default\nvariables:\n target-vm:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: default\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-12\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Target Instance With Security Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"custom-default-network\",\n autoCreateSubnetworks: false,\n routingMode: \"REGIONAL\",\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"custom-default-subnet\",\n ipCidrRange: \"10.1.2.0/24\",\n network: _default.id,\n privateIpv6GoogleAccess: \"DISABLE_GOOGLE_ACCESS\",\n purpose: \"PRIVATE\",\n region: \"southamerica-west1\",\n stackType: \"IPV4_ONLY\",\n});\nconst vmimage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst target_vm = new gcp.compute.Instance(\"target-vm\", {\n networkInterfaces: [{\n accessConfigs: [{}],\n network: _default.selfLink,\n subnetwork: defaultSubnetwork.selfLink,\n }],\n name: \"target-vm\",\n machineType: \"e2-medium\",\n zone: \"southamerica-west1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n});\nconst policyddosprotection = new gcp.compute.RegionSecurityPolicy(\"policyddosprotection\", {\n region: \"southamerica-west1\",\n name: \"tf-test-policyddos_85794\",\n description: \"ddos protection security policy to set target instance\",\n type: \"CLOUD_ARMOR_NETWORK\",\n ddosProtectionConfig: {\n ddosProtection: \"ADVANCED_PREVIEW\",\n },\n});\nconst edgeSecService = new gcp.compute.NetworkEdgeSecurityService(\"edge_sec_service\", {\n region: \"southamerica-west1\",\n name: \"tf-test-edgesec_21197\",\n securityPolicy: policyddosprotection.selfLink,\n});\nconst regionsecuritypolicy = new gcp.compute.RegionSecurityPolicy(\"regionsecuritypolicy\", {\n name: \"region-secpolicy\",\n region: \"southamerica-west1\",\n description: \"basic security policy for target instance\",\n type: \"CLOUD_ARMOR_NETWORK\",\n}, {\n dependsOn: [edgeSecService],\n});\nconst defaultTargetInstance = new gcp.compute.TargetInstance(\"default\", {\n name: \"target-instance\",\n zone: \"southamerica-west1-a\",\n instance: target_vm.id,\n securityPolicy: regionsecuritypolicy.selfLink,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"custom-default-network\",\n auto_create_subnetworks=False,\n routing_mode=\"REGIONAL\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"custom-default-subnet\",\n ip_cidr_range=\"10.1.2.0/24\",\n network=default.id,\n private_ipv6_google_access=\"DISABLE_GOOGLE_ACCESS\",\n purpose=\"PRIVATE\",\n region=\"southamerica-west1\",\n stack_type=\"IPV4_ONLY\")\nvmimage = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\ntarget_vm = gcp.compute.Instance(\"target-vm\",\n network_interfaces=[{\n \"access_configs\": [{}],\n \"network\": default.self_link,\n \"subnetwork\": default_subnetwork.self_link,\n }],\n name=\"target-vm\",\n machine_type=\"e2-medium\",\n zone=\"southamerica-west1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n })\npolicyddosprotection = gcp.compute.RegionSecurityPolicy(\"policyddosprotection\",\n region=\"southamerica-west1\",\n name=\"tf-test-policyddos_85794\",\n description=\"ddos protection security policy to set target instance\",\n type=\"CLOUD_ARMOR_NETWORK\",\n ddos_protection_config={\n \"ddos_protection\": \"ADVANCED_PREVIEW\",\n })\nedge_sec_service = gcp.compute.NetworkEdgeSecurityService(\"edge_sec_service\",\n region=\"southamerica-west1\",\n name=\"tf-test-edgesec_21197\",\n security_policy=policyddosprotection.self_link)\nregionsecuritypolicy = gcp.compute.RegionSecurityPolicy(\"regionsecuritypolicy\",\n name=\"region-secpolicy\",\n region=\"southamerica-west1\",\n description=\"basic security policy for target instance\",\n type=\"CLOUD_ARMOR_NETWORK\",\n opts = pulumi.ResourceOptions(depends_on=[edge_sec_service]))\ndefault_target_instance = gcp.compute.TargetInstance(\"default\",\n name=\"target-instance\",\n zone=\"southamerica-west1-a\",\n instance=target_vm.id,\n security_policy=regionsecuritypolicy.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"custom-default-network\",\n AutoCreateSubnetworks = false,\n RoutingMode = \"REGIONAL\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"custom-default-subnet\",\n IpCidrRange = \"10.1.2.0/24\",\n Network = @default.Id,\n PrivateIpv6GoogleAccess = \"DISABLE_GOOGLE_ACCESS\",\n Purpose = \"PRIVATE\",\n Region = \"southamerica-west1\",\n StackType = \"IPV4_ONLY\",\n });\n\n var vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var target_vm = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n AccessConfigs = new[]\n {\n null,\n },\n Network = @default.SelfLink,\n Subnetwork = defaultSubnetwork.SelfLink,\n },\n },\n Name = \"target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"southamerica-west1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n });\n\n var policyddosprotection = new Gcp.Compute.RegionSecurityPolicy(\"policyddosprotection\", new()\n {\n Region = \"southamerica-west1\",\n Name = \"tf-test-policyddos_85794\",\n Description = \"ddos protection security policy to set target instance\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n DdosProtectionConfig = new Gcp.Compute.Inputs.RegionSecurityPolicyDdosProtectionConfigArgs\n {\n DdosProtection = \"ADVANCED_PREVIEW\",\n },\n });\n\n var edgeSecService = new Gcp.Compute.NetworkEdgeSecurityService(\"edge_sec_service\", new()\n {\n Region = \"southamerica-west1\",\n Name = \"tf-test-edgesec_21197\",\n SecurityPolicy = policyddosprotection.SelfLink,\n });\n\n var regionsecuritypolicy = new Gcp.Compute.RegionSecurityPolicy(\"regionsecuritypolicy\", new()\n {\n Name = \"region-secpolicy\",\n Region = \"southamerica-west1\",\n Description = \"basic security policy for target instance\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n edgeSecService,\n },\n });\n\n var defaultTargetInstance = new Gcp.Compute.TargetInstance(\"default\", new()\n {\n Name = \"target-instance\",\n Zone = \"southamerica-west1-a\",\n Instance = target_vm.Id,\n SecurityPolicy = regionsecuritypolicy.SelfLink,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"custom-default-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t\tRoutingMode: pulumi.String(\"REGIONAL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"custom-default-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.2.0/24\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tPrivateIpv6GoogleAccess: pulumi.String(\"DISABLE_GOOGLE_ACCESS\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE\"),\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tStackType: pulumi.String(\"IPV4_ONLY\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{},\n\t\t\t\t\t},\n\t\t\t\t\tNetwork: _default.SelfLink,\n\t\t\t\t\tSubnetwork: defaultSubnetwork.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tName: pulumi.String(\"target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"southamerica-west1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpolicyddosprotection, err := compute.NewRegionSecurityPolicy(ctx, \"policyddosprotection\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tName: pulumi.String(\"tf-test-policyddos_85794\"),\n\t\t\tDescription: pulumi.String(\"ddos protection security policy to set target instance\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tDdosProtectionConfig: \u0026compute.RegionSecurityPolicyDdosProtectionConfigArgs{\n\t\t\t\tDdosProtection: pulumi.String(\"ADVANCED_PREVIEW\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tedgeSecService, err := compute.NewNetworkEdgeSecurityService(ctx, \"edge_sec_service\", \u0026compute.NetworkEdgeSecurityServiceArgs{\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tName: pulumi.String(\"tf-test-edgesec_21197\"),\n\t\t\tSecurityPolicy: policyddosprotection.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tregionsecuritypolicy, err := compute.NewRegionSecurityPolicy(ctx, \"regionsecuritypolicy\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"region-secpolicy\"),\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tDescription: pulumi.String(\"basic security policy for target instance\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tedgeSecService,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"default\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"target-instance\"),\n\t\t\tZone: pulumi.String(\"southamerica-west1-a\"),\n\t\t\tInstance: target_vm.ID(),\n\t\t\tSecurityPolicy: regionsecuritypolicy.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyDdosProtectionConfigArgs;\nimport com.pulumi.gcp.compute.NetworkEdgeSecurityService;\nimport com.pulumi.gcp.compute.NetworkEdgeSecurityServiceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"custom-default-network\")\n .autoCreateSubnetworks(false)\n .routingMode(\"REGIONAL\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"custom-default-subnet\")\n .ipCidrRange(\"10.1.2.0/24\")\n .network(default_.id())\n .privateIpv6GoogleAccess(\"DISABLE_GOOGLE_ACCESS\")\n .purpose(\"PRIVATE\")\n .region(\"southamerica-west1\")\n .stackType(\"IPV4_ONLY\")\n .build());\n\n final var vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vm = new Instance(\"target-vm\", InstanceArgs.builder()\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .accessConfigs()\n .network(default_.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build())\n .name(\"target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"southamerica-west1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .build());\n\n var policyddosprotection = new RegionSecurityPolicy(\"policyddosprotection\", RegionSecurityPolicyArgs.builder()\n .region(\"southamerica-west1\")\n .name(\"tf-test-policyddos_85794\")\n .description(\"ddos protection security policy to set target instance\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .ddosProtectionConfig(RegionSecurityPolicyDdosProtectionConfigArgs.builder()\n .ddosProtection(\"ADVANCED_PREVIEW\")\n .build())\n .build());\n\n var edgeSecService = new NetworkEdgeSecurityService(\"edgeSecService\", NetworkEdgeSecurityServiceArgs.builder()\n .region(\"southamerica-west1\")\n .name(\"tf-test-edgesec_21197\")\n .securityPolicy(policyddosprotection.selfLink())\n .build());\n\n var regionsecuritypolicy = new RegionSecurityPolicy(\"regionsecuritypolicy\", RegionSecurityPolicyArgs.builder()\n .name(\"region-secpolicy\")\n .region(\"southamerica-west1\")\n .description(\"basic security policy for target instance\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(edgeSecService)\n .build());\n\n var defaultTargetInstance = new TargetInstance(\"defaultTargetInstance\", TargetInstanceArgs.builder()\n .name(\"target-instance\")\n .zone(\"southamerica-west1-a\")\n .instance(target_vm.id())\n .securityPolicy(regionsecuritypolicy.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: custom-default-network\n autoCreateSubnetworks: false\n routingMode: REGIONAL\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: custom-default-subnet\n ipCidrRange: 10.1.2.0/24\n network: ${default.id}\n privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS\n purpose: PRIVATE\n region: southamerica-west1\n stackType: IPV4_ONLY\n target-vm:\n type: gcp:compute:Instance\n properties:\n networkInterfaces:\n - accessConfigs:\n - {}\n network: ${default.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n name: target-vm\n machineType: e2-medium\n zone: southamerica-west1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n policyddosprotection:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n region: southamerica-west1\n name: tf-test-policyddos_85794\n description: ddos protection security policy to set target instance\n type: CLOUD_ARMOR_NETWORK\n ddosProtectionConfig:\n ddosProtection: ADVANCED_PREVIEW\n edgeSecService:\n type: gcp:compute:NetworkEdgeSecurityService\n name: edge_sec_service\n properties:\n region: southamerica-west1\n name: tf-test-edgesec_21197\n securityPolicy: ${policyddosprotection.selfLink}\n regionsecuritypolicy:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: region-secpolicy\n region: southamerica-west1\n description: basic security policy for target instance\n type: CLOUD_ARMOR_NETWORK\n options:\n dependsOn:\n - ${edgeSecService}\n defaultTargetInstance:\n type: gcp:compute:TargetInstance\n name: default\n properties:\n name: target-instance\n zone: southamerica-west1-a\n instance: ${[\"target-vm\"].id}\n securityPolicy: ${regionsecuritypolicy.selfLink}\nvariables:\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTargetInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/zones/{{zone}}/targetInstances/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{zone}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TargetInstance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default projects/{{project}}/zones/{{zone}}/targetInstances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{name}}\n```\n\n", + "description": "Represents a TargetInstance resource which defines an endpoint instance\nthat terminates traffic of certain protocols. In particular, they are used\nin Protocol Forwarding, where forwarding rules can send packets to a\nnon-NAT'ed target instance. Each target instance contains a single\nvirtual machine instance that receives and handles traffic from the\ncorresponding forwarding rules.\n\n\nTo get more information about TargetInstance, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/targetInstances)\n* How-to Guides\n * [Using Protocol Forwarding](https://cloud.google.com/compute/docs/protocol-forwarding)\n\n## Example Usage\n\n### Target Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vmimage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst target_vm = new gcp.compute.Instance(\"target-vm\", {\n name: \"target-vm\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst _default = new gcp.compute.TargetInstance(\"default\", {\n name: \"target\",\n instance: target_vm.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvmimage = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\ntarget_vm = gcp.compute.Instance(\"target-vm\",\n name=\"target-vm\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }])\ndefault = gcp.compute.TargetInstance(\"default\",\n name=\"target\",\n instance=target_vm.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 vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var target_vm = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n Name = \"target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var @default = new Gcp.Compute.TargetInstance(\"default\", new()\n {\n Name = \"target\",\n Instance = target_vm.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"default\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"target\"),\n\t\t\tInstance: target_vm.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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vm = new Instance(\"target-vm\", InstanceArgs.builder()\n .name(\"target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var default_ = new TargetInstance(\"default\", TargetInstanceArgs.builder()\n .name(\"target\")\n .instance(target_vm.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:TargetInstance\n properties:\n name: target\n instance: ${[\"target-vm\"].id}\n target-vm:\n type: gcp:compute:Instance\n properties:\n name: target-vm\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n networkInterfaces:\n - network: default\nvariables:\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Target Instance Custom Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst target-vm = gcp.compute.getNetwork({\n name: \"default\",\n});\nconst vmimage = gcp.compute.getImage({\n family: \"debian-12\",\n project: \"debian-cloud\",\n});\nconst target_vmInstance = new gcp.compute.Instance(\"target-vm\", {\n name: \"custom-network-target-vm\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst customNetwork = new gcp.compute.TargetInstance(\"custom_network\", {\n name: \"custom-network\",\n instance: target_vmInstance.id,\n network: target_vm.then(target_vm =\u003e target_vm.selfLink),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_vm = gcp.compute.get_network(name=\"default\")\nvmimage = gcp.compute.get_image(family=\"debian-12\",\n project=\"debian-cloud\")\ntarget_vm_instance = gcp.compute.Instance(\"target-vm\",\n name=\"custom-network-target-vm\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }])\ncustom_network = gcp.compute.TargetInstance(\"custom_network\",\n name=\"custom-network\",\n instance=target_vm_instance.id,\n network=target_vm.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var target_vm = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"default\",\n });\n\n var vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-12\",\n Project = \"debian-cloud\",\n });\n\n var target_vmInstance = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n Name = \"custom-network-target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var customNetwork = new Gcp.Compute.TargetInstance(\"custom_network\", new()\n {\n Name = \"custom-network\",\n Instance = target_vmInstance.Id,\n Network = target_vm.Apply(target_vm =\u003e target_vm.Apply(getNetworkResult =\u003e getNetworkResult.SelfLink)),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttarget_vm, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-12\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"custom-network-target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"custom_network\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"custom-network\"),\n\t\t\tInstance: target_vmInstance.ID(),\n\t\t\tNetwork: pulumi.String(target_vm.SelfLink),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 target-vm = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"default\")\n .build());\n\n final var vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-12\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vmInstance = new Instance(\"target-vmInstance\", InstanceArgs.builder()\n .name(\"custom-network-target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var customNetwork = new TargetInstance(\"customNetwork\", TargetInstanceArgs.builder()\n .name(\"custom-network\")\n .instance(target_vmInstance.id())\n .network(target_vm.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customNetwork:\n type: gcp:compute:TargetInstance\n name: custom_network\n properties:\n name: custom-network\n instance: ${[\"target-vmInstance\"].id}\n network: ${[\"target-vm\"].selfLink}\n target-vmInstance:\n type: gcp:compute:Instance\n name: target-vm\n properties:\n name: custom-network-target-vm\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n networkInterfaces:\n - network: default\nvariables:\n target-vm:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: default\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-12\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Target Instance With Security Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"custom-default-network\",\n autoCreateSubnetworks: false,\n routingMode: \"REGIONAL\",\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"custom-default-subnet\",\n ipCidrRange: \"10.1.2.0/24\",\n network: _default.id,\n privateIpv6GoogleAccess: \"DISABLE_GOOGLE_ACCESS\",\n purpose: \"PRIVATE\",\n region: \"southamerica-west1\",\n stackType: \"IPV4_ONLY\",\n});\nconst vmimage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst target_vm = new gcp.compute.Instance(\"target-vm\", {\n networkInterfaces: [{\n accessConfigs: [{}],\n network: _default.selfLink,\n subnetwork: defaultSubnetwork.selfLink,\n }],\n name: \"target-vm\",\n machineType: \"e2-medium\",\n zone: \"southamerica-west1-a\",\n bootDisk: {\n initializeParams: {\n image: vmimage.then(vmimage =\u003e vmimage.selfLink),\n },\n },\n});\nconst policyddosprotection = new gcp.compute.RegionSecurityPolicy(\"policyddosprotection\", {\n region: \"southamerica-west1\",\n name: \"tf-test-policyddos_21197\",\n description: \"ddos protection security policy to set target instance\",\n type: \"CLOUD_ARMOR_NETWORK\",\n ddosProtectionConfig: {\n ddosProtection: \"ADVANCED_PREVIEW\",\n },\n});\nconst edgeSecService = new gcp.compute.NetworkEdgeSecurityService(\"edge_sec_service\", {\n region: \"southamerica-west1\",\n name: \"tf-test-edgesec_52865\",\n securityPolicy: policyddosprotection.selfLink,\n});\nconst regionsecuritypolicy = new gcp.compute.RegionSecurityPolicy(\"regionsecuritypolicy\", {\n name: \"region-secpolicy\",\n region: \"southamerica-west1\",\n description: \"basic security policy for target instance\",\n type: \"CLOUD_ARMOR_NETWORK\",\n}, {\n dependsOn: [edgeSecService],\n});\nconst defaultTargetInstance = new gcp.compute.TargetInstance(\"default\", {\n name: \"target-instance\",\n zone: \"southamerica-west1-a\",\n instance: target_vm.id,\n securityPolicy: regionsecuritypolicy.selfLink,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"custom-default-network\",\n auto_create_subnetworks=False,\n routing_mode=\"REGIONAL\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"custom-default-subnet\",\n ip_cidr_range=\"10.1.2.0/24\",\n network=default.id,\n private_ipv6_google_access=\"DISABLE_GOOGLE_ACCESS\",\n purpose=\"PRIVATE\",\n region=\"southamerica-west1\",\n stack_type=\"IPV4_ONLY\")\nvmimage = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\ntarget_vm = gcp.compute.Instance(\"target-vm\",\n network_interfaces=[{\n \"access_configs\": [{}],\n \"network\": default.self_link,\n \"subnetwork\": default_subnetwork.self_link,\n }],\n name=\"target-vm\",\n machine_type=\"e2-medium\",\n zone=\"southamerica-west1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": vmimage.self_link,\n },\n })\npolicyddosprotection = gcp.compute.RegionSecurityPolicy(\"policyddosprotection\",\n region=\"southamerica-west1\",\n name=\"tf-test-policyddos_21197\",\n description=\"ddos protection security policy to set target instance\",\n type=\"CLOUD_ARMOR_NETWORK\",\n ddos_protection_config={\n \"ddos_protection\": \"ADVANCED_PREVIEW\",\n })\nedge_sec_service = gcp.compute.NetworkEdgeSecurityService(\"edge_sec_service\",\n region=\"southamerica-west1\",\n name=\"tf-test-edgesec_52865\",\n security_policy=policyddosprotection.self_link)\nregionsecuritypolicy = gcp.compute.RegionSecurityPolicy(\"regionsecuritypolicy\",\n name=\"region-secpolicy\",\n region=\"southamerica-west1\",\n description=\"basic security policy for target instance\",\n type=\"CLOUD_ARMOR_NETWORK\",\n opts = pulumi.ResourceOptions(depends_on=[edge_sec_service]))\ndefault_target_instance = gcp.compute.TargetInstance(\"default\",\n name=\"target-instance\",\n zone=\"southamerica-west1-a\",\n instance=target_vm.id,\n security_policy=regionsecuritypolicy.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"custom-default-network\",\n AutoCreateSubnetworks = false,\n RoutingMode = \"REGIONAL\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"custom-default-subnet\",\n IpCidrRange = \"10.1.2.0/24\",\n Network = @default.Id,\n PrivateIpv6GoogleAccess = \"DISABLE_GOOGLE_ACCESS\",\n Purpose = \"PRIVATE\",\n Region = \"southamerica-west1\",\n StackType = \"IPV4_ONLY\",\n });\n\n var vmimage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var target_vm = new Gcp.Compute.Instance(\"target-vm\", new()\n {\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n AccessConfigs = new[]\n {\n null,\n },\n Network = @default.SelfLink,\n Subnetwork = defaultSubnetwork.SelfLink,\n },\n },\n Name = \"target-vm\",\n MachineType = \"e2-medium\",\n Zone = \"southamerica-west1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = vmimage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n });\n\n var policyddosprotection = new Gcp.Compute.RegionSecurityPolicy(\"policyddosprotection\", new()\n {\n Region = \"southamerica-west1\",\n Name = \"tf-test-policyddos_21197\",\n Description = \"ddos protection security policy to set target instance\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n DdosProtectionConfig = new Gcp.Compute.Inputs.RegionSecurityPolicyDdosProtectionConfigArgs\n {\n DdosProtection = \"ADVANCED_PREVIEW\",\n },\n });\n\n var edgeSecService = new Gcp.Compute.NetworkEdgeSecurityService(\"edge_sec_service\", new()\n {\n Region = \"southamerica-west1\",\n Name = \"tf-test-edgesec_52865\",\n SecurityPolicy = policyddosprotection.SelfLink,\n });\n\n var regionsecuritypolicy = new Gcp.Compute.RegionSecurityPolicy(\"regionsecuritypolicy\", new()\n {\n Name = \"region-secpolicy\",\n Region = \"southamerica-west1\",\n Description = \"basic security policy for target instance\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n edgeSecService,\n },\n });\n\n var defaultTargetInstance = new Gcp.Compute.TargetInstance(\"default\", new()\n {\n Name = \"target-instance\",\n Zone = \"southamerica-west1-a\",\n Instance = target_vm.Id,\n SecurityPolicy = regionsecuritypolicy.SelfLink,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"custom-default-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t\tRoutingMode: pulumi.String(\"REGIONAL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"custom-default-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.2.0/24\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tPrivateIpv6GoogleAccess: pulumi.String(\"DISABLE_GOOGLE_ACCESS\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE\"),\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tStackType: pulumi.String(\"IPV4_ONLY\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvmimage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"target-vm\", \u0026compute.InstanceArgs{\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{},\n\t\t\t\t\t},\n\t\t\t\t\tNetwork: _default.SelfLink,\n\t\t\t\t\tSubnetwork: defaultSubnetwork.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tName: pulumi.String(\"target-vm\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"southamerica-west1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(vmimage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpolicyddosprotection, err := compute.NewRegionSecurityPolicy(ctx, \"policyddosprotection\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tName: pulumi.String(\"tf-test-policyddos_21197\"),\n\t\t\tDescription: pulumi.String(\"ddos protection security policy to set target instance\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tDdosProtectionConfig: \u0026compute.RegionSecurityPolicyDdosProtectionConfigArgs{\n\t\t\t\tDdosProtection: pulumi.String(\"ADVANCED_PREVIEW\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tedgeSecService, err := compute.NewNetworkEdgeSecurityService(ctx, \"edge_sec_service\", \u0026compute.NetworkEdgeSecurityServiceArgs{\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tName: pulumi.String(\"tf-test-edgesec_52865\"),\n\t\t\tSecurityPolicy: policyddosprotection.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tregionsecuritypolicy, err := compute.NewRegionSecurityPolicy(ctx, \"regionsecuritypolicy\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"region-secpolicy\"),\n\t\t\tRegion: pulumi.String(\"southamerica-west1\"),\n\t\t\tDescription: pulumi.String(\"basic security policy for target instance\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tedgeSecService,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewTargetInstance(ctx, \"default\", \u0026compute.TargetInstanceArgs{\n\t\t\tName: pulumi.String(\"target-instance\"),\n\t\t\tZone: pulumi.String(\"southamerica-west1-a\"),\n\t\t\tInstance: target_vm.ID(),\n\t\t\tSecurityPolicy: regionsecuritypolicy.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyDdosProtectionConfigArgs;\nimport com.pulumi.gcp.compute.NetworkEdgeSecurityService;\nimport com.pulumi.gcp.compute.NetworkEdgeSecurityServiceArgs;\nimport com.pulumi.gcp.compute.TargetInstance;\nimport com.pulumi.gcp.compute.TargetInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"custom-default-network\")\n .autoCreateSubnetworks(false)\n .routingMode(\"REGIONAL\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"custom-default-subnet\")\n .ipCidrRange(\"10.1.2.0/24\")\n .network(default_.id())\n .privateIpv6GoogleAccess(\"DISABLE_GOOGLE_ACCESS\")\n .purpose(\"PRIVATE\")\n .region(\"southamerica-west1\")\n .stackType(\"IPV4_ONLY\")\n .build());\n\n final var vmimage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var target_vm = new Instance(\"target-vm\", InstanceArgs.builder()\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .accessConfigs()\n .network(default_.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build())\n .name(\"target-vm\")\n .machineType(\"e2-medium\")\n .zone(\"southamerica-west1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(vmimage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .build());\n\n var policyddosprotection = new RegionSecurityPolicy(\"policyddosprotection\", RegionSecurityPolicyArgs.builder()\n .region(\"southamerica-west1\")\n .name(\"tf-test-policyddos_21197\")\n .description(\"ddos protection security policy to set target instance\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .ddosProtectionConfig(RegionSecurityPolicyDdosProtectionConfigArgs.builder()\n .ddosProtection(\"ADVANCED_PREVIEW\")\n .build())\n .build());\n\n var edgeSecService = new NetworkEdgeSecurityService(\"edgeSecService\", NetworkEdgeSecurityServiceArgs.builder()\n .region(\"southamerica-west1\")\n .name(\"tf-test-edgesec_52865\")\n .securityPolicy(policyddosprotection.selfLink())\n .build());\n\n var regionsecuritypolicy = new RegionSecurityPolicy(\"regionsecuritypolicy\", RegionSecurityPolicyArgs.builder()\n .name(\"region-secpolicy\")\n .region(\"southamerica-west1\")\n .description(\"basic security policy for target instance\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(edgeSecService)\n .build());\n\n var defaultTargetInstance = new TargetInstance(\"defaultTargetInstance\", TargetInstanceArgs.builder()\n .name(\"target-instance\")\n .zone(\"southamerica-west1-a\")\n .instance(target_vm.id())\n .securityPolicy(regionsecuritypolicy.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: custom-default-network\n autoCreateSubnetworks: false\n routingMode: REGIONAL\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: custom-default-subnet\n ipCidrRange: 10.1.2.0/24\n network: ${default.id}\n privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS\n purpose: PRIVATE\n region: southamerica-west1\n stackType: IPV4_ONLY\n target-vm:\n type: gcp:compute:Instance\n properties:\n networkInterfaces:\n - accessConfigs:\n - {}\n network: ${default.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n name: target-vm\n machineType: e2-medium\n zone: southamerica-west1-a\n bootDisk:\n initializeParams:\n image: ${vmimage.selfLink}\n policyddosprotection:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n region: southamerica-west1\n name: tf-test-policyddos_21197\n description: ddos protection security policy to set target instance\n type: CLOUD_ARMOR_NETWORK\n ddosProtectionConfig:\n ddosProtection: ADVANCED_PREVIEW\n edgeSecService:\n type: gcp:compute:NetworkEdgeSecurityService\n name: edge_sec_service\n properties:\n region: southamerica-west1\n name: tf-test-edgesec_52865\n securityPolicy: ${policyddosprotection.selfLink}\n regionsecuritypolicy:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: region-secpolicy\n region: southamerica-west1\n description: basic security policy for target instance\n type: CLOUD_ARMOR_NETWORK\n options:\n dependsOn:\n - ${edgeSecService}\n defaultTargetInstance:\n type: gcp:compute:TargetInstance\n name: default\n properties:\n name: target-instance\n zone: southamerica-west1-a\n instance: ${[\"target-vm\"].id}\n securityPolicy: ${regionsecuritypolicy.selfLink}\nvariables:\n vmimage:\n fn::invoke:\n function: gcp:compute:getImage\n arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTargetInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/zones/{{zone}}/targetInstances/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{zone}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TargetInstance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default projects/{{project}}/zones/{{zone}}/targetInstances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/targetInstance:TargetInstance default {{name}}\n```\n\n", "properties": { "creationTimestamp": { "type": "string", @@ -189690,7 +191194,7 @@ } }, "gcp:compute/uRLMap:URLMap": { - "description": "UrlMaps are used to route requests to a backend service based on rules\nthat you define for the host and path of an incoming URL.\n\n\nTo get more information about UrlMap, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps)\n\n## Example Usage\n\n### Url Map Bucket And Service\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst login = new gcp.compute.BackendService(\"login\", {\n name: \"login\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n});\nconst staticBucket = new gcp.storage.Bucket(\"static\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst static = new gcp.compute.BackendBucket(\"static\", {\n name: \"static-asset-backend-bucket\",\n bucketName: staticBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: static.id,\n hostRules: [\n {\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n },\n {\n hosts: [\"myothersite.com\"],\n pathMatcher: \"otherpaths\",\n },\n ],\n pathMatchers: [\n {\n name: \"mysite\",\n defaultService: static.id,\n pathRules: [\n {\n paths: [\"/home\"],\n service: static.id,\n },\n {\n paths: [\"/login\"],\n service: login.id,\n },\n {\n paths: [\"/static\"],\n service: static.id,\n },\n ],\n },\n {\n name: \"otherpaths\",\n defaultService: static.id,\n },\n ],\n tests: [{\n service: static.id,\n host: \"example.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\nlogin = gcp.compute.BackendService(\"login\",\n name=\"login\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id)\nstatic_bucket = gcp.storage.Bucket(\"static\",\n name=\"static-asset-bucket\",\n location=\"US\")\nstatic = gcp.compute.BackendBucket(\"static\",\n name=\"static-asset-backend-bucket\",\n bucket_name=static_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=static.id,\n host_rules=[\n {\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n },\n {\n \"hosts\": [\"myothersite.com\"],\n \"path_matcher\": \"otherpaths\",\n },\n ],\n path_matchers=[\n {\n \"name\": \"mysite\",\n \"default_service\": static.id,\n \"path_rules\": [\n {\n \"paths\": [\"/home\"],\n \"service\": static.id,\n },\n {\n \"paths\": [\"/login\"],\n \"service\": login.id,\n },\n {\n \"paths\": [\"/static\"],\n \"service\": static.id,\n },\n ],\n },\n {\n \"name\": \"otherpaths\",\n \"default_service\": static.id,\n },\n ],\n tests=[{\n \"service\": static.id,\n \"host\": \"example.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var login = new Gcp.Compute.BackendService(\"login\", new()\n {\n Name = \"login\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n });\n\n var staticBucket = new Gcp.Storage.Bucket(\"static\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var @static = new Gcp.Compute.BackendBucket(\"static\", new()\n {\n Name = \"static-asset-backend-bucket\",\n BucketName = staticBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = @static.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"myothersite.com\",\n },\n PathMatcher = \"otherpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = @static.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n Service = @static.Id,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/login\",\n },\n Service = login.Id,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/static\",\n },\n Service = @static.Id,\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"otherpaths\",\n DefaultService = @static.Id,\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = @static.Id,\n Host = \"example.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/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\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlogin, err := compute.NewBackendService(ctx, \"login\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"login\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstaticBucket, err := storage.NewBucket(ctx, \"static\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatic, err := compute.NewBackendBucket(ctx, \"static\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-backend-bucket\"),\n\t\t\tBucketName: staticBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: static.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"myothersite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"otherpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: static.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/login\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: login.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/static\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: static.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"otherpaths\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: static.ID(),\n\t\t\t\t\tHost: pulumi.String(\"example.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var login = new BackendService(\"login\", BackendServiceArgs.builder()\n .name(\"login\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var staticBucket = new Bucket(\"staticBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var static_ = new BackendBucket(\"static\", BackendBucketArgs.builder()\n .name(\"static-asset-backend-bucket\")\n .bucketName(staticBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(static_.id())\n .hostRules( \n URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build(),\n URLMapHostRuleArgs.builder()\n .hosts(\"myothersite.com\")\n .pathMatcher(\"otherpaths\")\n .build())\n .pathMatchers( \n URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(static_.id())\n .pathRules( \n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(static_.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/static\")\n .service(static_.id())\n .build())\n .build(),\n URLMapPathMatcherArgs.builder()\n .name(\"otherpaths\")\n .defaultService(static_.id())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(static_.id())\n .host(\"example.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${static.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n - hosts:\n - myothersite.com\n pathMatcher: otherpaths\n pathMatchers:\n - name: mysite\n defaultService: ${static.id}\n pathRules:\n - paths:\n - /home\n service: ${static.id}\n - paths:\n - /login\n service: ${login.id}\n - paths:\n - /static\n service: ${static.id}\n - name: otherpaths\n defaultService: ${static.id}\n tests:\n - service: ${static.id}\n host: example.com\n path: /home\n login:\n type: gcp:compute:BackendService\n properties:\n name: login\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n static:\n type: gcp:compute:BackendBucket\n properties:\n name: static-asset-backend-bucket\n bucketName: ${staticBucket.name}\n enableCdn: true\n staticBucket:\n type: gcp:storage:Bucket\n name: static\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Route\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n routeRules: [{\n priority: 1,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe2\"],\n requestHeadersToAdds: [{\n headerName: \"AddSomethingElse\",\n headerValue: \"MyOtherValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe3\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n matchRules: [{\n fullPathMatch: \"a full path\",\n headerMatches: [{\n headerName: \"someheader\",\n exactMatch: \"match this exactly\",\n invertMatch: true,\n }],\n ignoreCase: true,\n metadataFilters: [{\n filterMatchCriteria: \"MATCH_ANY\",\n filterLabels: [{\n name: \"PLANET\",\n value: \"MARS\",\n }],\n }],\n queryParameterMatches: [{\n name: \"a query parameter\",\n presentMatch: true,\n }],\n }],\n urlRedirect: {\n hostRedirect: \"A host\",\n httpsRedirect: false,\n pathRedirect: \"some/path\",\n redirectResponseCode: \"TEMPORARY_REDIRECT\",\n stripQuery: true,\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"route_rules\": [{\n \"priority\": 1,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe2\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddSomethingElse\",\n \"header_value\": \"MyOtherValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe3\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n \"match_rules\": [{\n \"full_path_match\": \"a full path\",\n \"header_matches\": [{\n \"header_name\": \"someheader\",\n \"exact_match\": \"match this exactly\",\n \"invert_match\": True,\n }],\n \"ignore_case\": True,\n \"metadata_filters\": [{\n \"filter_match_criteria\": \"MATCH_ANY\",\n \"filter_labels\": [{\n \"name\": \"PLANET\",\n \"value\": \"MARS\",\n }],\n }],\n \"query_parameter_matches\": [{\n \"name\": \"a query parameter\",\n \"present_match\": True,\n }],\n }],\n \"url_redirect\": {\n \"host_redirect\": \"A host\",\n \"https_redirect\": False,\n \"path_redirect\": \"some/path\",\n \"redirect_response_code\": \"TEMPORARY_REDIRECT\",\n \"strip_query\": True,\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe2\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddSomethingElse\",\n HeaderValue = \"MyOtherValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe3\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n FullPathMatch = \"a full path\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"someheader\",\n ExactMatch = \"match this exactly\",\n InvertMatch = true,\n },\n },\n IgnoreCase = true,\n MetadataFilters = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs\n {\n FilterMatchCriteria = \"MATCH_ANY\",\n FilterLabels = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs\n {\n Name = \"PLANET\",\n Value = \"MARS\",\n },\n },\n },\n },\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"a query parameter\",\n PresentMatch = true,\n },\n },\n },\n },\n UrlRedirect = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleUrlRedirectArgs\n {\n HostRedirect = \"A host\",\n HttpsRedirect = false,\n PathRedirect = \"some/path\",\n RedirectResponseCode = \"TEMPORARY_REDIRECT\",\n StripQuery = true,\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherRouteRuleHeaderActionArgs{\n\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe2\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddSomethingElse\"),\n\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyOtherValue\"),\n\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe3\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tFullPathMatch: pulumi.String(\"a full path\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"someheader\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"match this exactly\"),\n\t\t\t\t\t\t\t\t\t\t\tInvertMatch: pulumi.Bool(true),\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\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tMetadataFilters: compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs{\n\t\t\t\t\t\t\t\t\t\t\tFilterMatchCriteria: pulumi.String(\"MATCH_ANY\"),\n\t\t\t\t\t\t\t\t\t\t\tFilterLabels: compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"PLANET\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"MARS\"),\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},\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a query parameter\"),\n\t\t\t\t\t\t\t\t\t\t\tPresentMatch: pulumi.Bool(true),\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\tUrlRedirect: \u0026compute.URLMapPathMatcherRouteRuleUrlRedirectArgs{\n\t\t\t\t\t\t\t\tHostRedirect: pulumi.String(\"A host\"),\n\t\t\t\t\t\t\t\tHttpsRedirect: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tPathRedirect: pulumi.String(\"some/path\"),\n\t\t\t\t\t\t\t\tRedirectResponseCode: pulumi.String(\"TEMPORARY_REDIRECT\"),\n\t\t\t\t\t\t\t\tStripQuery: pulumi.Bool(true),\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .headerAction(URLMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .requestHeadersToAdds(URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddSomethingElse\")\n .headerValue(\"MyOtherValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe3\")\n .responseHeadersToAdds(URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .ignoreCase(true)\n .metadataFilters(URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .urlRedirect(URLMapPathMatcherRouteRuleUrlRedirectArgs.builder()\n .hostRedirect(\"A host\")\n .httpsRedirect(false)\n .pathRedirect(\"some/path\")\n .redirectResponseCode(\"TEMPORARY_REDIRECT\")\n .stripQuery(true)\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n routeRules:\n - priority: 1\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe2\n requestHeadersToAdds:\n - headerName: AddSomethingElse\n headerValue: MyOtherValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe3\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n matchRules:\n - fullPathMatch: a full path\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n ignoreCase: true\n metadataFilters:\n - filterMatchCriteria: MATCH_ANY\n filterLabels:\n - name: PLANET\n value: MARS\n queryParameterMatches:\n - name: a query parameter\n presentMatch: true\n urlRedirect:\n hostRedirect: A host\n httpsRedirect: false\n pathRedirect: some/path\n redirectResponseCode: TEMPORARY_REDIRECT\n stripQuery: true\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Route Partial\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n routeRules: [{\n priority: 1,\n matchRules: [{\n prefixMatch: \"/someprefix\",\n headerMatches: [{\n headerName: \"someheader\",\n exactMatch: \"match this exactly\",\n invertMatch: true,\n }],\n }],\n urlRedirect: {\n pathRedirect: \"some/path\",\n redirectResponseCode: \"TEMPORARY_REDIRECT\",\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"route_rules\": [{\n \"priority\": 1,\n \"match_rules\": [{\n \"prefix_match\": \"/someprefix\",\n \"header_matches\": [{\n \"header_name\": \"someheader\",\n \"exact_match\": \"match this exactly\",\n \"invert_match\": True,\n }],\n }],\n \"url_redirect\": {\n \"path_redirect\": \"some/path\",\n \"redirect_response_code\": \"TEMPORARY_REDIRECT\",\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/someprefix\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"someheader\",\n ExactMatch = \"match this exactly\",\n InvertMatch = true,\n },\n },\n },\n },\n UrlRedirect = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleUrlRedirectArgs\n {\n PathRedirect = \"some/path\",\n RedirectResponseCode = \"TEMPORARY_REDIRECT\",\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/someprefix\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"someheader\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"match this exactly\"),\n\t\t\t\t\t\t\t\t\t\t\tInvertMatch: pulumi.Bool(true),\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\tUrlRedirect: \u0026compute.URLMapPathMatcherRouteRuleUrlRedirectArgs{\n\t\t\t\t\t\t\t\tPathRedirect: pulumi.String(\"some/path\"),\n\t\t\t\t\t\t\t\tRedirectResponseCode: pulumi.String(\"TEMPORARY_REDIRECT\"),\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/someprefix\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .build())\n .urlRedirect(URLMapPathMatcherRouteRuleUrlRedirectArgs.builder()\n .pathRedirect(\"some/path\")\n .redirectResponseCode(\"TEMPORARY_REDIRECT\")\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n routeRules:\n - priority: 1\n matchRules:\n - prefixMatch: /someprefix\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n urlRedirect:\n pathRedirect: some/path\n redirectResponseCode: TEMPORARY_REDIRECT\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Path\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n pathRules: [{\n paths: [\"/home\"],\n routeAction: {\n corsPolicy: {\n allowCredentials: true,\n allowHeaders: [\"Allowed content\"],\n allowMethods: [\"GET\"],\n allowOriginRegexes: [\"abc.*\"],\n allowOrigins: [\"Allowed origin\"],\n exposeHeaders: [\"Exposed header\"],\n maxAge: 30,\n disabled: false,\n },\n faultInjectionPolicy: {\n abort: {\n httpStatus: 234,\n percentage: 5.6,\n },\n delay: {\n fixedDelay: {\n seconds: \"0\",\n nanos: 50000,\n },\n percentage: 7.8,\n },\n },\n requestMirrorPolicy: {\n backendService: home.id,\n },\n retryPolicy: {\n numRetries: 4,\n perTryTimeout: {\n seconds: \"30\",\n },\n retryConditions: [\n \"5xx\",\n \"deadline-exceeded\",\n ],\n },\n timeout: {\n seconds: \"20\",\n nanos: 750000000,\n },\n urlRewrite: {\n hostRewrite: \"dev.example.com\",\n pathPrefixRewrite: \"/v1/api/\",\n },\n weightedBackendServices: [{\n backendService: home.id,\n weight: 400,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe\"],\n requestHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n }],\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"path_rules\": [{\n \"paths\": [\"/home\"],\n \"route_action\": {\n \"cors_policy\": {\n \"allow_credentials\": True,\n \"allow_headers\": [\"Allowed content\"],\n \"allow_methods\": [\"GET\"],\n \"allow_origin_regexes\": [\"abc.*\"],\n \"allow_origins\": [\"Allowed origin\"],\n \"expose_headers\": [\"Exposed header\"],\n \"max_age\": 30,\n \"disabled\": False,\n },\n \"fault_injection_policy\": {\n \"abort\": {\n \"http_status\": 234,\n \"percentage\": 5.6,\n },\n \"delay\": {\n \"fixed_delay\": {\n \"seconds\": \"0\",\n \"nanos\": 50000,\n },\n \"percentage\": 7.8,\n },\n },\n \"request_mirror_policy\": {\n \"backend_service\": home.id,\n },\n \"retry_policy\": {\n \"num_retries\": 4,\n \"per_try_timeout\": {\n \"seconds\": \"30\",\n },\n \"retry_conditions\": [\n \"5xx\",\n \"deadline-exceeded\",\n ],\n },\n \"timeout\": {\n \"seconds\": \"20\",\n \"nanos\": 750000000,\n },\n \"url_rewrite\": {\n \"host_rewrite\": \"dev.example.com\",\n \"path_prefix_rewrite\": \"/v1/api/\",\n },\n \"weighted_backend_services\": [{\n \"backend_service\": home.id,\n \"weight\": 400,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n }],\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionArgs\n {\n CorsPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs\n {\n AllowCredentials = true,\n AllowHeaders = new[]\n {\n \"Allowed content\",\n },\n AllowMethods = new[]\n {\n \"GET\",\n },\n AllowOriginRegexes = new[]\n {\n \"abc.*\",\n },\n AllowOrigins = new[]\n {\n \"Allowed origin\",\n },\n ExposeHeaders = new[]\n {\n \"Exposed header\",\n },\n MaxAge = 30,\n Disabled = false,\n },\n FaultInjectionPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs\n {\n Abort = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs\n {\n HttpStatus = 234,\n Percentage = 5.6,\n },\n Delay = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs\n {\n FixedDelay = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs\n {\n Seconds = \"0\",\n Nanos = 50000,\n },\n Percentage = 7.8,\n },\n },\n RequestMirrorPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs\n {\n BackendService = home.Id,\n },\n RetryPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs\n {\n NumRetries = 4,\n PerTryTimeout = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs\n {\n Seconds = \"30\",\n },\n RetryConditions = new[]\n {\n \"5xx\",\n \"deadline-exceeded\",\n },\n },\n Timeout = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionTimeoutArgs\n {\n Seconds = \"20\",\n Nanos = 750000000,\n },\n UrlRewrite = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs\n {\n HostRewrite = \"dev.example.com\",\n PathPrefixRewrite = \"/v1/api/\",\n },\n WeightedBackendServices = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs\n {\n BackendService = home.Id,\n Weight = 400,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tCorsPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs{\n\t\t\t\t\t\t\t\t\tAllowCredentials: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tAllowHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed content\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowMethods: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"GET\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOriginRegexes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"abc.*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOrigins: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed origin\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Exposed header\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMaxAge: pulumi.Int(30),\n\t\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tFaultInjectionPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs{\n\t\t\t\t\t\t\t\t\tAbort: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs{\n\t\t\t\t\t\t\t\t\t\tHttpStatus: pulumi.Int(234),\n\t\t\t\t\t\t\t\t\t\tPercentage: pulumi.Float64(5.6),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tDelay: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{\n\t\t\t\t\t\t\t\t\t\tFixedDelay: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{\n\t\t\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"0\"),\n\t\t\t\t\t\t\t\t\t\t\tNanos: pulumi.Int(50000),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tPercentage: pulumi.Float64(7.8),\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\tRequestMirrorPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs{\n\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tRetryPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs{\n\t\t\t\t\t\t\t\t\tNumRetries: pulumi.Int(4),\n\t\t\t\t\t\t\t\t\tPerTryTimeout: \u0026compute.URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs{\n\t\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"30\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRetryConditions: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"deadline-exceeded\"),\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\tTimeout: \u0026compute.URLMapPathMatcherPathRuleRouteActionTimeoutArgs{\n\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"20\"),\n\t\t\t\t\t\t\t\t\tNanos: pulumi.Int(750000000),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tUrlRewrite: \u0026compute.URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs{\n\t\t\t\t\t\t\t\t\tHostRewrite: pulumi.String(\"dev.example.com\"),\n\t\t\t\t\t\t\t\t\tPathPrefixRewrite: pulumi.String(\"/v1/api/\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tWeightedBackendServices: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs{\n\t\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t\t\tWeight: pulumi.Int(400),\n\t\t\t\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs{\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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},\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(URLMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOriginRegexes(\"abc.*\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .faultInjectionPolicy(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs.builder()\n .abort(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(234)\n .percentage(5.6)\n .build())\n .delay(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(50000)\n .build())\n .percentage(7.8)\n .build())\n .build())\n .requestMirrorPolicy(URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .retryPolicy(URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(URLMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n pathRules:\n - paths:\n - /home\n routeAction:\n corsPolicy:\n allowCredentials: true\n allowHeaders:\n - Allowed content\n allowMethods:\n - GET\n allowOriginRegexes:\n - abc.*\n allowOrigins:\n - Allowed origin\n exposeHeaders:\n - Exposed header\n maxAge: 30\n disabled: false\n faultInjectionPolicy:\n abort:\n httpStatus: 234\n percentage: 5.6\n delay:\n fixedDelay:\n seconds: 0\n nanos: 50000\n percentage: 7.8\n requestMirrorPolicy:\n backendService: ${home.id}\n retryPolicy:\n numRetries: 4\n perTryTimeout:\n seconds: 30\n retryConditions:\n - 5xx\n - deadline-exceeded\n timeout:\n seconds: 20\n nanos: 7.5e+08\n urlRewrite:\n hostRewrite: dev.example.com\n pathPrefixRewrite: /v1/api/\n weightedBackendServices:\n - backendService: ${home.id}\n weight: 400\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe\n requestHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Path Partial\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n pathRules: [{\n paths: [\"/home\"],\n routeAction: {\n corsPolicy: {\n allowCredentials: true,\n allowHeaders: [\"Allowed content\"],\n allowMethods: [\"GET\"],\n allowOriginRegexes: [\"abc.*\"],\n allowOrigins: [\"Allowed origin\"],\n exposeHeaders: [\"Exposed header\"],\n maxAge: 30,\n disabled: false,\n },\n weightedBackendServices: [{\n backendService: home.id,\n weight: 400,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe\"],\n requestHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n }],\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"path_rules\": [{\n \"paths\": [\"/home\"],\n \"route_action\": {\n \"cors_policy\": {\n \"allow_credentials\": True,\n \"allow_headers\": [\"Allowed content\"],\n \"allow_methods\": [\"GET\"],\n \"allow_origin_regexes\": [\"abc.*\"],\n \"allow_origins\": [\"Allowed origin\"],\n \"expose_headers\": [\"Exposed header\"],\n \"max_age\": 30,\n \"disabled\": False,\n },\n \"weighted_backend_services\": [{\n \"backend_service\": home.id,\n \"weight\": 400,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n }],\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionArgs\n {\n CorsPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs\n {\n AllowCredentials = true,\n AllowHeaders = new[]\n {\n \"Allowed content\",\n },\n AllowMethods = new[]\n {\n \"GET\",\n },\n AllowOriginRegexes = new[]\n {\n \"abc.*\",\n },\n AllowOrigins = new[]\n {\n \"Allowed origin\",\n },\n ExposeHeaders = new[]\n {\n \"Exposed header\",\n },\n MaxAge = 30,\n Disabled = false,\n },\n WeightedBackendServices = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs\n {\n BackendService = home.Id,\n Weight = 400,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tCorsPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs{\n\t\t\t\t\t\t\t\t\tAllowCredentials: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tAllowHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed content\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowMethods: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"GET\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOriginRegexes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"abc.*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOrigins: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed origin\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Exposed header\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMaxAge: pulumi.Int(30),\n\t\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tWeightedBackendServices: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs{\n\t\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t\t\tWeight: pulumi.Int(400),\n\t\t\t\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs{\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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},\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(URLMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOriginRegexes(\"abc.*\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .weightedBackendServices(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n pathRules:\n - paths:\n - /home\n routeAction:\n corsPolicy:\n allowCredentials: true\n allowHeaders:\n - Allowed content\n allowMethods:\n - GET\n allowOriginRegexes:\n - abc.*\n allowOrigins:\n - Allowed origin\n exposeHeaders:\n - Exposed header\n maxAge: 30\n disabled: false\n weightedBackendServices:\n - backendService: ${home.id}\n weight: 400\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe\n requestHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Header Based Routing\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"default\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_a = new gcp.compute.BackendService(\"service-a\", {\n name: \"service-a\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_b = new gcp.compute.BackendService(\"service-b\", {\n name: \"service-b\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"header-based routing example\",\n defaultService: _default.id,\n hostRules: [{\n hosts: [\"*\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: _default.id,\n routeRules: [\n {\n priority: 1,\n service: service_a.id,\n matchRules: [{\n prefixMatch: \"/\",\n ignoreCase: true,\n headerMatches: [{\n headerName: \"abtest\",\n exactMatch: \"a\",\n }],\n }],\n },\n {\n priority: 2,\n service: service_b.id,\n matchRules: [{\n ignoreCase: true,\n prefixMatch: \"/\",\n headerMatches: [{\n headerName: \"abtest\",\n exactMatch: \"b\",\n }],\n }],\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"default\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_a = gcp.compute.BackendService(\"service-a\",\n name=\"service-a\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_b = gcp.compute.BackendService(\"service-b\",\n name=\"service-b\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"header-based routing example\",\n default_service=default.id,\n host_rules=[{\n \"hosts\": [\"*\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": default.id,\n \"route_rules\": [\n {\n \"priority\": 1,\n \"service\": service_a.id,\n \"match_rules\": [{\n \"prefix_match\": \"/\",\n \"ignore_case\": True,\n \"header_matches\": [{\n \"header_name\": \"abtest\",\n \"exact_match\": \"a\",\n }],\n }],\n },\n {\n \"priority\": 2,\n \"service\": service_b.id,\n \"match_rules\": [{\n \"ignore_case\": True,\n \"prefix_match\": \"/\",\n \"header_matches\": [{\n \"header_name\": \"abtest\",\n \"exact_match\": \"b\",\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 defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"default\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_a = new Gcp.Compute.BackendService(\"service-a\", new()\n {\n Name = \"service-a\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_b = new Gcp.Compute.BackendService(\"service-b\", new()\n {\n Name = \"service-b\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"header-based routing example\",\n DefaultService = @default.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"*\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = @default.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n Service = service_a.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/\",\n IgnoreCase = true,\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"abtest\",\n ExactMatch = \"a\",\n },\n },\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 2,\n Service = service_b.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n IgnoreCase = true,\n PrefixMatch = \"/\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"abtest\",\n ExactMatch = \"b\",\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-a\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-a\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-b\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-b\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"header-based routing example\"),\n\t\t\tDefaultService: _default.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: _default.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tService: service_a.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"a\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\n\t\t\t\t\t\t\tService: service_b.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"b\"),\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"default\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_a = new BackendService(\"service-a\", BackendServiceArgs.builder()\n .name(\"service-a\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_b = new BackendService(\"service-b\", BackendServiceArgs.builder()\n .name(\"service-b\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"header-based routing example\")\n .defaultService(default_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"*\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(default_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(service_a.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/\")\n .ignoreCase(true)\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"abtest\")\n .exactMatch(\"a\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(2)\n .service(service_b.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .ignoreCase(true)\n .prefixMatch(\"/\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"abtest\")\n .exactMatch(\"b\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: header-based routing example\n defaultService: ${default.id}\n hostRules:\n - hosts:\n - '*'\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${default.id}\n routeRules:\n - priority: 1\n service: ${[\"service-a\"].id}\n matchRules:\n - prefixMatch: /\n ignoreCase: true\n headerMatches:\n - headerName: abtest\n exactMatch: a\n - priority: 2\n service: ${[\"service-b\"].id}\n matchRules:\n - ignoreCase: true\n prefixMatch: /\n headerMatches:\n - headerName: abtest\n exactMatch: b\n default:\n type: gcp:compute:BackendService\n properties:\n name: default\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-a:\n type: gcp:compute:BackendService\n properties:\n name: service-a\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-b:\n type: gcp:compute:BackendService\n properties:\n name: service-b\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Parameter Based Routing\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"default\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_a = new gcp.compute.BackendService(\"service-a\", {\n name: \"service-a\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_b = new gcp.compute.BackendService(\"service-b\", {\n name: \"service-b\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"parameter-based routing example\",\n defaultService: _default.id,\n hostRules: [{\n hosts: [\"*\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: _default.id,\n routeRules: [\n {\n priority: 1,\n service: service_a.id,\n matchRules: [{\n prefixMatch: \"/\",\n ignoreCase: true,\n queryParameterMatches: [{\n name: \"abtest\",\n exactMatch: \"a\",\n }],\n }],\n },\n {\n priority: 2,\n service: service_b.id,\n matchRules: [{\n ignoreCase: true,\n prefixMatch: \"/\",\n queryParameterMatches: [{\n name: \"abtest\",\n exactMatch: \"b\",\n }],\n }],\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"default\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_a = gcp.compute.BackendService(\"service-a\",\n name=\"service-a\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_b = gcp.compute.BackendService(\"service-b\",\n name=\"service-b\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"parameter-based routing example\",\n default_service=default.id,\n host_rules=[{\n \"hosts\": [\"*\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": default.id,\n \"route_rules\": [\n {\n \"priority\": 1,\n \"service\": service_a.id,\n \"match_rules\": [{\n \"prefix_match\": \"/\",\n \"ignore_case\": True,\n \"query_parameter_matches\": [{\n \"name\": \"abtest\",\n \"exact_match\": \"a\",\n }],\n }],\n },\n {\n \"priority\": 2,\n \"service\": service_b.id,\n \"match_rules\": [{\n \"ignore_case\": True,\n \"prefix_match\": \"/\",\n \"query_parameter_matches\": [{\n \"name\": \"abtest\",\n \"exact_match\": \"b\",\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 defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"default\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_a = new Gcp.Compute.BackendService(\"service-a\", new()\n {\n Name = \"service-a\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_b = new Gcp.Compute.BackendService(\"service-b\", new()\n {\n Name = \"service-b\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"parameter-based routing example\",\n DefaultService = @default.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"*\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = @default.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n Service = service_a.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/\",\n IgnoreCase = true,\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"abtest\",\n ExactMatch = \"a\",\n },\n },\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 2,\n Service = service_b.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n IgnoreCase = true,\n PrefixMatch = \"/\",\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"abtest\",\n ExactMatch = \"b\",\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-a\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-a\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-b\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-b\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"parameter-based routing example\"),\n\t\t\tDefaultService: _default.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: _default.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tService: service_a.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"a\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\n\t\t\t\t\t\t\tService: service_b.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"b\"),\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"default\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_a = new BackendService(\"service-a\", BackendServiceArgs.builder()\n .name(\"service-a\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_b = new BackendService(\"service-b\", BackendServiceArgs.builder()\n .name(\"service-b\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"parameter-based routing example\")\n .defaultService(default_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"*\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(default_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(service_a.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/\")\n .ignoreCase(true)\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"abtest\")\n .exactMatch(\"a\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(2)\n .service(service_b.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .ignoreCase(true)\n .prefixMatch(\"/\")\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"abtest\")\n .exactMatch(\"b\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: parameter-based routing example\n defaultService: ${default.id}\n hostRules:\n - hosts:\n - '*'\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${default.id}\n routeRules:\n - priority: 1\n service: ${[\"service-a\"].id}\n matchRules:\n - prefixMatch: /\n ignoreCase: true\n queryParameterMatches:\n - name: abtest\n exactMatch: a\n - priority: 2\n service: ${[\"service-b\"].id}\n matchRules:\n - ignoreCase: true\n prefixMatch: /\n queryParameterMatches:\n - name: abtest\n exactMatch: b\n default:\n type: gcp:compute:BackendService\n properties:\n name: default\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-a:\n type: gcp:compute:BackendService\n properties:\n name: service-a\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-b:\n type: gcp:compute:BackendService\n properties:\n name: service-b\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Path Template Match\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst cart_backend = new gcp.compute.BackendService(\"cart-backend\", {\n name: \"cart-service\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst user_backend = new gcp.compute.BackendService(\"user-backend\", {\n name: \"user-service\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst staticBucket = new gcp.storage.Bucket(\"static\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst static = new gcp.compute.BackendBucket(\"static\", {\n name: \"static-asset-backend-bucket\",\n bucketName: staticBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: static.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n }],\n pathMatchers: [{\n name: \"mysite\",\n defaultService: static.id,\n routeRules: [\n {\n matchRules: [{\n pathTemplateMatch: \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n }],\n service: cart_backend.id,\n priority: 1,\n routeAction: {\n urlRewrite: {\n pathTemplateRewrite: \"/{username}-{cartid}/\",\n },\n },\n },\n {\n matchRules: [{\n pathTemplateMatch: \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n }],\n service: user_backend.id,\n priority: 2,\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ncart_backend = gcp.compute.BackendService(\"cart-backend\",\n name=\"cart-service\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nuser_backend = gcp.compute.BackendService(\"user-backend\",\n name=\"user-service\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nstatic_bucket = gcp.storage.Bucket(\"static\",\n name=\"static-asset-bucket\",\n location=\"US\")\nstatic = gcp.compute.BackendBucket(\"static\",\n name=\"static-asset-backend-bucket\",\n bucket_name=static_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=static.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n }],\n path_matchers=[{\n \"name\": \"mysite\",\n \"default_service\": static.id,\n \"route_rules\": [\n {\n \"match_rules\": [{\n \"path_template_match\": \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n }],\n \"service\": cart_backend.id,\n \"priority\": 1,\n \"route_action\": {\n \"url_rewrite\": {\n \"path_template_rewrite\": \"/{username}-{cartid}/\",\n },\n },\n },\n {\n \"match_rules\": [{\n \"path_template_match\": \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n }],\n \"service\": user_backend.id,\n \"priority\": 2,\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 @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var cart_backend = new Gcp.Compute.BackendService(\"cart-backend\", new()\n {\n Name = \"cart-service\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var user_backend = new Gcp.Compute.BackendService(\"user-backend\", new()\n {\n Name = \"user-service\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var staticBucket = new Gcp.Storage.Bucket(\"static\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var @static = new Gcp.Compute.BackendBucket(\"static\", new()\n {\n Name = \"static-asset-backend-bucket\",\n BucketName = staticBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = @static.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = @static.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PathTemplateMatch = \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n },\n },\n Service = cart_backend.Id,\n Priority = 1,\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleRouteActionArgs\n {\n UrlRewrite = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs\n {\n PathTemplateRewrite = \"/{username}-{cartid}/\",\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PathTemplateMatch = \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n },\n },\n Service = user_backend.Id,\n Priority = 2,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"cart-backend\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"cart-service\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"user-backend\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"user-service\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstaticBucket, err := storage.NewBucket(ctx, \"static\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatic, err := compute.NewBackendBucket(ctx, \"static\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-backend-bucket\"),\n\t\t\tBucketName: staticBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: static.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateMatch: pulumi.String(\"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: cart_backend.ID(),\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherRouteRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tUrlRewrite: \u0026compute.URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateRewrite: pulumi.String(\"/{username}-{cartid}/\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateMatch: pulumi.String(\"/xyzwebservices/v2/xyz/users/*/accountinfo/*\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: user_backend.ID(),\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\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.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var cart_backend = new BackendService(\"cart-backend\", BackendServiceArgs.builder()\n .name(\"cart-service\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var user_backend = new BackendService(\"user-backend\", BackendServiceArgs.builder()\n .name(\"user-service\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var staticBucket = new Bucket(\"staticBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var static_ = new BackendBucket(\"static\", BackendBucketArgs.builder()\n .name(\"static-asset-backend-bucket\")\n .bucketName(staticBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(static_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(static_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .pathTemplateMatch(\"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\")\n .build())\n .service(cart_backend.id())\n .priority(1)\n .routeAction(URLMapPathMatcherRouteRuleRouteActionArgs.builder()\n .urlRewrite(URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs.builder()\n .pathTemplateRewrite(\"/{username}-{cartid}/\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .pathTemplateMatch(\"/xyzwebservices/v2/xyz/users/*/accountinfo/*\")\n .build())\n .service(user_backend.id())\n .priority(2)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${static.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n pathMatchers:\n - name: mysite\n defaultService: ${static.id}\n routeRules:\n - matchRules:\n - pathTemplateMatch: /xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\n service: ${[\"cart-backend\"].id}\n priority: 1\n routeAction:\n urlRewrite:\n pathTemplateRewrite: /{username}-{cartid}/\n - matchRules:\n - pathTemplateMatch: /xyzwebservices/v2/xyz/users/*/accountinfo/*\n service: ${[\"user-backend\"].id}\n priority: 2\n cart-backend:\n type: gcp:compute:BackendService\n properties:\n name: cart-service\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n user-backend:\n type: gcp:compute:BackendService\n properties:\n name: user-service\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n static:\n type: gcp:compute:BackendBucket\n properties:\n name: static-asset-backend-bucket\n bucketName: ${staticBucket.name}\n enableCdn: true\n staticBucket:\n type: gcp:storage:Bucket\n name: static\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Custom Error Response Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst example = new gcp.compute.BackendService(\"example\", {\n name: \"login\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst errorBucket = new gcp.storage.Bucket(\"error\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst error = new gcp.compute.BackendBucket(\"error\", {\n name: \"error-backend-bucket\",\n bucketName: errorBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: example.id,\n defaultCustomErrorResponsePolicy: {\n errorResponseRules: [{\n matchResponseCodes: [\"5xx\"],\n path: \"/internal_error.html\",\n overrideResponseCode: 502,\n }],\n errorService: error.id,\n },\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n }],\n pathMatchers: [{\n name: \"mysite\",\n defaultService: example.id,\n defaultCustomErrorResponsePolicy: {\n errorResponseRules: [\n {\n matchResponseCodes: [\n \"4xx\",\n \"5xx\",\n ],\n path: \"/login_error.html\",\n overrideResponseCode: 404,\n },\n {\n matchResponseCodes: [\"503\"],\n path: \"/bad_gateway.html\",\n overrideResponseCode: 502,\n },\n ],\n errorService: error.id,\n },\n pathRules: [{\n paths: [\"/private/*\"],\n service: example.id,\n customErrorResponsePolicy: {\n errorResponseRules: [{\n matchResponseCodes: [\"4xx\"],\n path: \"/login.html\",\n overrideResponseCode: 401,\n }],\n errorService: error.id,\n },\n }],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\nexample = gcp.compute.BackendService(\"example\",\n name=\"login\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nerror_bucket = gcp.storage.Bucket(\"error\",\n name=\"static-asset-bucket\",\n location=\"US\")\nerror = gcp.compute.BackendBucket(\"error\",\n name=\"error-backend-bucket\",\n bucket_name=error_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=example.id,\n default_custom_error_response_policy={\n \"error_response_rules\": [{\n \"match_response_codes\": [\"5xx\"],\n \"path\": \"/internal_error.html\",\n \"override_response_code\": 502,\n }],\n \"error_service\": error.id,\n },\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n }],\n path_matchers=[{\n \"name\": \"mysite\",\n \"default_service\": example.id,\n \"default_custom_error_response_policy\": {\n \"error_response_rules\": [\n {\n \"match_response_codes\": [\n \"4xx\",\n \"5xx\",\n ],\n \"path\": \"/login_error.html\",\n \"override_response_code\": 404,\n },\n {\n \"match_response_codes\": [\"503\"],\n \"path\": \"/bad_gateway.html\",\n \"override_response_code\": 502,\n },\n ],\n \"error_service\": error.id,\n },\n \"path_rules\": [{\n \"paths\": [\"/private/*\"],\n \"service\": example.id,\n \"custom_error_response_policy\": {\n \"error_response_rules\": [{\n \"match_response_codes\": [\"4xx\"],\n \"path\": \"/login.html\",\n \"override_response_code\": 401,\n }],\n \"error_service\": error.id,\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 @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var example = new Gcp.Compute.BackendService(\"example\", new()\n {\n Name = \"login\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var errorBucket = new Gcp.Storage.Bucket(\"error\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var error = new Gcp.Compute.BackendBucket(\"error\", new()\n {\n Name = \"error-backend-bucket\",\n BucketName = errorBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = example.Id,\n DefaultCustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapDefaultCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"5xx\",\n },\n Path = \"/internal_error.html\",\n OverrideResponseCode = 502,\n },\n },\n ErrorService = error.Id,\n },\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = example.Id,\n DefaultCustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"4xx\",\n \"5xx\",\n },\n Path = \"/login_error.html\",\n OverrideResponseCode = 404,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"503\",\n },\n Path = \"/bad_gateway.html\",\n OverrideResponseCode = 502,\n },\n },\n ErrorService = error.Id,\n },\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/private/*\",\n },\n Service = example.Id,\n CustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"4xx\",\n },\n Path = \"/login.html\",\n OverrideResponseCode = 401,\n },\n },\n ErrorService = error.Id,\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := compute.NewBackendService(ctx, \"example\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"login\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terrorBucket, err := storage.NewBucket(ctx, \"error\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terror, err := compute.NewBackendBucket(ctx, \"error\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"error-backend-bucket\"),\n\t\t\tBucketName: errorBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: example.ID(),\n\t\t\tDefaultCustomErrorResponsePolicy: \u0026compute.URLMapDefaultCustomErrorResponsePolicyArgs{\n\t\t\t\tErrorResponseRules: compute.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\u0026compute.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPath: pulumi.String(\"/internal_error.html\"),\n\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(502),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tErrorService: error.ID(),\n\t\t\t},\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: example.ID(),\n\t\t\t\t\tDefaultCustomErrorResponsePolicy: \u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs{\n\t\t\t\t\t\tErrorResponseRules: compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"4xx\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/login_error.html\"),\n\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(404),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"503\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/bad_gateway.html\"),\n\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(502),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tErrorService: error.ID(),\n\t\t\t\t\t},\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/private/*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: example.ID(),\n\t\t\t\t\t\t\tCustomErrorResponsePolicy: \u0026compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs{\n\t\t\t\t\t\t\t\tErrorResponseRules: compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"4xx\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"/login.html\"),\n\t\t\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(401),\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\tErrorService: error.ID(),\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.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapDefaultCustomErrorResponsePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var example = new BackendService(\"example\", BackendServiceArgs.builder()\n .name(\"login\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var errorBucket = new Bucket(\"errorBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var error = new BackendBucket(\"error\", BackendBucketArgs.builder()\n .name(\"error-backend-bucket\")\n .bucketName(errorBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(example.id())\n .defaultCustomErrorResponsePolicy(URLMapDefaultCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules(URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"5xx\")\n .path(\"/internal_error.html\")\n .overrideResponseCode(502)\n .build())\n .errorService(error.id())\n .build())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(example.id())\n .defaultCustomErrorResponsePolicy(URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules( \n URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes( \n \"4xx\",\n \"5xx\")\n .path(\"/login_error.html\")\n .overrideResponseCode(404)\n .build(),\n URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"503\")\n .path(\"/bad_gateway.html\")\n .overrideResponseCode(502)\n .build())\n .errorService(error.id())\n .build())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/private/*\")\n .service(example.id())\n .customErrorResponsePolicy(URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules(URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"4xx\")\n .path(\"/login.html\")\n .overrideResponseCode(401)\n .build())\n .errorService(error.id())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${example.id}\n defaultCustomErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 5xx\n path: /internal_error.html\n overrideResponseCode: 502\n errorService: ${error.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n pathMatchers:\n - name: mysite\n defaultService: ${example.id}\n defaultCustomErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 4xx\n - 5xx\n path: /login_error.html\n overrideResponseCode: 404\n - matchResponseCodes:\n - '503'\n path: /bad_gateway.html\n overrideResponseCode: 502\n errorService: ${error.id}\n pathRules:\n - paths:\n - /private/*\n service: ${example.id}\n customErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 4xx\n path: /login.html\n overrideResponseCode: 401\n errorService: ${error.id}\n example:\n type: gcp:compute:BackendService\n properties:\n name: login\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n error:\n type: gcp:compute:BackendBucket\n properties:\n name: error-backend-bucket\n bucketName: ${errorBucket.name}\n enableCdn: true\n errorBucket:\n type: gcp:storage:Bucket\n name: error\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUrlMap can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/urlMaps/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, UrlMap can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default projects/{{project}}/global/urlMaps/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default {{name}}\n```\n\n", + "description": "UrlMaps are used to route requests to a backend service based on rules\nthat you define for the host and path of an incoming URL.\n\n\nTo get more information about UrlMap, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts)\n\n## Example Usage\n\n### Url Map Bucket And Service\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst login = new gcp.compute.BackendService(\"login\", {\n name: \"login\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n});\nconst staticBucket = new gcp.storage.Bucket(\"static\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst static = new gcp.compute.BackendBucket(\"static\", {\n name: \"static-asset-backend-bucket\",\n bucketName: staticBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: static.id,\n hostRules: [\n {\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n },\n {\n hosts: [\"myothersite.com\"],\n pathMatcher: \"otherpaths\",\n },\n ],\n pathMatchers: [\n {\n name: \"mysite\",\n defaultService: static.id,\n pathRules: [\n {\n paths: [\"/home\"],\n service: static.id,\n },\n {\n paths: [\"/login\"],\n service: login.id,\n },\n {\n paths: [\"/static\"],\n service: static.id,\n },\n ],\n },\n {\n name: \"otherpaths\",\n defaultService: static.id,\n },\n ],\n tests: [{\n service: static.id,\n host: \"example.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\nlogin = gcp.compute.BackendService(\"login\",\n name=\"login\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id)\nstatic_bucket = gcp.storage.Bucket(\"static\",\n name=\"static-asset-bucket\",\n location=\"US\")\nstatic = gcp.compute.BackendBucket(\"static\",\n name=\"static-asset-backend-bucket\",\n bucket_name=static_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=static.id,\n host_rules=[\n {\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n },\n {\n \"hosts\": [\"myothersite.com\"],\n \"path_matcher\": \"otherpaths\",\n },\n ],\n path_matchers=[\n {\n \"name\": \"mysite\",\n \"default_service\": static.id,\n \"path_rules\": [\n {\n \"paths\": [\"/home\"],\n \"service\": static.id,\n },\n {\n \"paths\": [\"/login\"],\n \"service\": login.id,\n },\n {\n \"paths\": [\"/static\"],\n \"service\": static.id,\n },\n ],\n },\n {\n \"name\": \"otherpaths\",\n \"default_service\": static.id,\n },\n ],\n tests=[{\n \"service\": static.id,\n \"host\": \"example.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var login = new Gcp.Compute.BackendService(\"login\", new()\n {\n Name = \"login\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n });\n\n var staticBucket = new Gcp.Storage.Bucket(\"static\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var @static = new Gcp.Compute.BackendBucket(\"static\", new()\n {\n Name = \"static-asset-backend-bucket\",\n BucketName = staticBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = @static.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"myothersite.com\",\n },\n PathMatcher = \"otherpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = @static.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n Service = @static.Id,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/login\",\n },\n Service = login.Id,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/static\",\n },\n Service = @static.Id,\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"otherpaths\",\n DefaultService = @static.Id,\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = @static.Id,\n Host = \"example.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/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\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlogin, err := compute.NewBackendService(ctx, \"login\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"login\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstaticBucket, err := storage.NewBucket(ctx, \"static\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatic, err := compute.NewBackendBucket(ctx, \"static\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-backend-bucket\"),\n\t\t\tBucketName: staticBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: static.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"myothersite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"otherpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: static.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/login\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: login.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/static\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: static.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"otherpaths\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: static.ID(),\n\t\t\t\t\tHost: pulumi.String(\"example.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var login = new BackendService(\"login\", BackendServiceArgs.builder()\n .name(\"login\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var staticBucket = new Bucket(\"staticBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var static_ = new BackendBucket(\"static\", BackendBucketArgs.builder()\n .name(\"static-asset-backend-bucket\")\n .bucketName(staticBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(static_.id())\n .hostRules( \n URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build(),\n URLMapHostRuleArgs.builder()\n .hosts(\"myothersite.com\")\n .pathMatcher(\"otherpaths\")\n .build())\n .pathMatchers( \n URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(static_.id())\n .pathRules( \n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(static_.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/static\")\n .service(static_.id())\n .build())\n .build(),\n URLMapPathMatcherArgs.builder()\n .name(\"otherpaths\")\n .defaultService(static_.id())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(static_.id())\n .host(\"example.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${static.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n - hosts:\n - myothersite.com\n pathMatcher: otherpaths\n pathMatchers:\n - name: mysite\n defaultService: ${static.id}\n pathRules:\n - paths:\n - /home\n service: ${static.id}\n - paths:\n - /login\n service: ${login.id}\n - paths:\n - /static\n service: ${static.id}\n - name: otherpaths\n defaultService: ${static.id}\n tests:\n - service: ${static.id}\n host: example.com\n path: /home\n login:\n type: gcp:compute:BackendService\n properties:\n name: login\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n static:\n type: gcp:compute:BackendBucket\n properties:\n name: static-asset-backend-bucket\n bucketName: ${staticBucket.name}\n enableCdn: true\n staticBucket:\n type: gcp:storage:Bucket\n name: static\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Route\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n routeRules: [{\n priority: 1,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe2\"],\n requestHeadersToAdds: [{\n headerName: \"AddSomethingElse\",\n headerValue: \"MyOtherValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe3\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n matchRules: [{\n fullPathMatch: \"a full path\",\n headerMatches: [{\n headerName: \"someheader\",\n exactMatch: \"match this exactly\",\n invertMatch: true,\n }],\n ignoreCase: true,\n metadataFilters: [{\n filterMatchCriteria: \"MATCH_ANY\",\n filterLabels: [{\n name: \"PLANET\",\n value: \"MARS\",\n }],\n }],\n queryParameterMatches: [{\n name: \"a query parameter\",\n presentMatch: true,\n }],\n }],\n urlRedirect: {\n hostRedirect: \"A host\",\n httpsRedirect: false,\n pathRedirect: \"some/path\",\n redirectResponseCode: \"TEMPORARY_REDIRECT\",\n stripQuery: true,\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"route_rules\": [{\n \"priority\": 1,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe2\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddSomethingElse\",\n \"header_value\": \"MyOtherValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe3\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n \"match_rules\": [{\n \"full_path_match\": \"a full path\",\n \"header_matches\": [{\n \"header_name\": \"someheader\",\n \"exact_match\": \"match this exactly\",\n \"invert_match\": True,\n }],\n \"ignore_case\": True,\n \"metadata_filters\": [{\n \"filter_match_criteria\": \"MATCH_ANY\",\n \"filter_labels\": [{\n \"name\": \"PLANET\",\n \"value\": \"MARS\",\n }],\n }],\n \"query_parameter_matches\": [{\n \"name\": \"a query parameter\",\n \"present_match\": True,\n }],\n }],\n \"url_redirect\": {\n \"host_redirect\": \"A host\",\n \"https_redirect\": False,\n \"path_redirect\": \"some/path\",\n \"redirect_response_code\": \"TEMPORARY_REDIRECT\",\n \"strip_query\": True,\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe2\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddSomethingElse\",\n HeaderValue = \"MyOtherValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe3\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n FullPathMatch = \"a full path\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"someheader\",\n ExactMatch = \"match this exactly\",\n InvertMatch = true,\n },\n },\n IgnoreCase = true,\n MetadataFilters = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs\n {\n FilterMatchCriteria = \"MATCH_ANY\",\n FilterLabels = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs\n {\n Name = \"PLANET\",\n Value = \"MARS\",\n },\n },\n },\n },\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"a query parameter\",\n PresentMatch = true,\n },\n },\n },\n },\n UrlRedirect = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleUrlRedirectArgs\n {\n HostRedirect = \"A host\",\n HttpsRedirect = false,\n PathRedirect = \"some/path\",\n RedirectResponseCode = \"TEMPORARY_REDIRECT\",\n StripQuery = true,\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherRouteRuleHeaderActionArgs{\n\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe2\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddSomethingElse\"),\n\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyOtherValue\"),\n\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe3\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tFullPathMatch: pulumi.String(\"a full path\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"someheader\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"match this exactly\"),\n\t\t\t\t\t\t\t\t\t\t\tInvertMatch: pulumi.Bool(true),\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\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tMetadataFilters: compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs{\n\t\t\t\t\t\t\t\t\t\t\tFilterMatchCriteria: pulumi.String(\"MATCH_ANY\"),\n\t\t\t\t\t\t\t\t\t\t\tFilterLabels: compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"PLANET\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"MARS\"),\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},\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a query parameter\"),\n\t\t\t\t\t\t\t\t\t\t\tPresentMatch: pulumi.Bool(true),\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\tUrlRedirect: \u0026compute.URLMapPathMatcherRouteRuleUrlRedirectArgs{\n\t\t\t\t\t\t\t\tHostRedirect: pulumi.String(\"A host\"),\n\t\t\t\t\t\t\t\tHttpsRedirect: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tPathRedirect: pulumi.String(\"some/path\"),\n\t\t\t\t\t\t\t\tRedirectResponseCode: pulumi.String(\"TEMPORARY_REDIRECT\"),\n\t\t\t\t\t\t\t\tStripQuery: pulumi.Bool(true),\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .headerAction(URLMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .requestHeadersToAdds(URLMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddSomethingElse\")\n .headerValue(\"MyOtherValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe3\")\n .responseHeadersToAdds(URLMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .ignoreCase(true)\n .metadataFilters(URLMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(URLMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .urlRedirect(URLMapPathMatcherRouteRuleUrlRedirectArgs.builder()\n .hostRedirect(\"A host\")\n .httpsRedirect(false)\n .pathRedirect(\"some/path\")\n .redirectResponseCode(\"TEMPORARY_REDIRECT\")\n .stripQuery(true)\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n routeRules:\n - priority: 1\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe2\n requestHeadersToAdds:\n - headerName: AddSomethingElse\n headerValue: MyOtherValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe3\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n matchRules:\n - fullPathMatch: a full path\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n ignoreCase: true\n metadataFilters:\n - filterMatchCriteria: MATCH_ANY\n filterLabels:\n - name: PLANET\n value: MARS\n queryParameterMatches:\n - name: a query parameter\n presentMatch: true\n urlRedirect:\n hostRedirect: A host\n httpsRedirect: false\n pathRedirect: some/path\n redirectResponseCode: TEMPORARY_REDIRECT\n stripQuery: true\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Route Partial\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n routeRules: [{\n priority: 1,\n matchRules: [{\n prefixMatch: \"/someprefix\",\n headerMatches: [{\n headerName: \"someheader\",\n exactMatch: \"match this exactly\",\n invertMatch: true,\n }],\n }],\n urlRedirect: {\n pathRedirect: \"some/path\",\n redirectResponseCode: \"TEMPORARY_REDIRECT\",\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"route_rules\": [{\n \"priority\": 1,\n \"match_rules\": [{\n \"prefix_match\": \"/someprefix\",\n \"header_matches\": [{\n \"header_name\": \"someheader\",\n \"exact_match\": \"match this exactly\",\n \"invert_match\": True,\n }],\n }],\n \"url_redirect\": {\n \"path_redirect\": \"some/path\",\n \"redirect_response_code\": \"TEMPORARY_REDIRECT\",\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/someprefix\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"someheader\",\n ExactMatch = \"match this exactly\",\n InvertMatch = true,\n },\n },\n },\n },\n UrlRedirect = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleUrlRedirectArgs\n {\n PathRedirect = \"some/path\",\n RedirectResponseCode = \"TEMPORARY_REDIRECT\",\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/someprefix\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"someheader\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"match this exactly\"),\n\t\t\t\t\t\t\t\t\t\t\tInvertMatch: pulumi.Bool(true),\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\tUrlRedirect: \u0026compute.URLMapPathMatcherRouteRuleUrlRedirectArgs{\n\t\t\t\t\t\t\t\tPathRedirect: pulumi.String(\"some/path\"),\n\t\t\t\t\t\t\t\tRedirectResponseCode: pulumi.String(\"TEMPORARY_REDIRECT\"),\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/someprefix\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .build())\n .urlRedirect(URLMapPathMatcherRouteRuleUrlRedirectArgs.builder()\n .pathRedirect(\"some/path\")\n .redirectResponseCode(\"TEMPORARY_REDIRECT\")\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n routeRules:\n - priority: 1\n matchRules:\n - prefixMatch: /someprefix\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n urlRedirect:\n pathRedirect: some/path\n redirectResponseCode: TEMPORARY_REDIRECT\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Path\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n pathRules: [{\n paths: [\"/home\"],\n routeAction: {\n corsPolicy: {\n allowCredentials: true,\n allowHeaders: [\"Allowed content\"],\n allowMethods: [\"GET\"],\n allowOriginRegexes: [\"abc.*\"],\n allowOrigins: [\"Allowed origin\"],\n exposeHeaders: [\"Exposed header\"],\n maxAge: 30,\n disabled: false,\n },\n faultInjectionPolicy: {\n abort: {\n httpStatus: 234,\n percentage: 5.6,\n },\n delay: {\n fixedDelay: {\n seconds: \"0\",\n nanos: 50000,\n },\n percentage: 7.8,\n },\n },\n requestMirrorPolicy: {\n backendService: home.id,\n },\n retryPolicy: {\n numRetries: 4,\n perTryTimeout: {\n seconds: \"30\",\n },\n retryConditions: [\n \"5xx\",\n \"deadline-exceeded\",\n ],\n },\n timeout: {\n seconds: \"20\",\n nanos: 750000000,\n },\n urlRewrite: {\n hostRewrite: \"dev.example.com\",\n pathPrefixRewrite: \"/v1/api/\",\n },\n weightedBackendServices: [{\n backendService: home.id,\n weight: 400,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe\"],\n requestHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n }],\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"path_rules\": [{\n \"paths\": [\"/home\"],\n \"route_action\": {\n \"cors_policy\": {\n \"allow_credentials\": True,\n \"allow_headers\": [\"Allowed content\"],\n \"allow_methods\": [\"GET\"],\n \"allow_origin_regexes\": [\"abc.*\"],\n \"allow_origins\": [\"Allowed origin\"],\n \"expose_headers\": [\"Exposed header\"],\n \"max_age\": 30,\n \"disabled\": False,\n },\n \"fault_injection_policy\": {\n \"abort\": {\n \"http_status\": 234,\n \"percentage\": 5.6,\n },\n \"delay\": {\n \"fixed_delay\": {\n \"seconds\": \"0\",\n \"nanos\": 50000,\n },\n \"percentage\": 7.8,\n },\n },\n \"request_mirror_policy\": {\n \"backend_service\": home.id,\n },\n \"retry_policy\": {\n \"num_retries\": 4,\n \"per_try_timeout\": {\n \"seconds\": \"30\",\n },\n \"retry_conditions\": [\n \"5xx\",\n \"deadline-exceeded\",\n ],\n },\n \"timeout\": {\n \"seconds\": \"20\",\n \"nanos\": 750000000,\n },\n \"url_rewrite\": {\n \"host_rewrite\": \"dev.example.com\",\n \"path_prefix_rewrite\": \"/v1/api/\",\n },\n \"weighted_backend_services\": [{\n \"backend_service\": home.id,\n \"weight\": 400,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n }],\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionArgs\n {\n CorsPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs\n {\n AllowCredentials = true,\n AllowHeaders = new[]\n {\n \"Allowed content\",\n },\n AllowMethods = new[]\n {\n \"GET\",\n },\n AllowOriginRegexes = new[]\n {\n \"abc.*\",\n },\n AllowOrigins = new[]\n {\n \"Allowed origin\",\n },\n ExposeHeaders = new[]\n {\n \"Exposed header\",\n },\n MaxAge = 30,\n Disabled = false,\n },\n FaultInjectionPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs\n {\n Abort = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs\n {\n HttpStatus = 234,\n Percentage = 5.6,\n },\n Delay = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs\n {\n FixedDelay = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs\n {\n Seconds = \"0\",\n Nanos = 50000,\n },\n Percentage = 7.8,\n },\n },\n RequestMirrorPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs\n {\n BackendService = home.Id,\n },\n RetryPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs\n {\n NumRetries = 4,\n PerTryTimeout = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs\n {\n Seconds = \"30\",\n },\n RetryConditions = new[]\n {\n \"5xx\",\n \"deadline-exceeded\",\n },\n },\n Timeout = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionTimeoutArgs\n {\n Seconds = \"20\",\n Nanos = 750000000,\n },\n UrlRewrite = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs\n {\n HostRewrite = \"dev.example.com\",\n PathPrefixRewrite = \"/v1/api/\",\n },\n WeightedBackendServices = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs\n {\n BackendService = home.Id,\n Weight = 400,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tCorsPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs{\n\t\t\t\t\t\t\t\t\tAllowCredentials: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tAllowHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed content\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowMethods: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"GET\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOriginRegexes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"abc.*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOrigins: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed origin\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Exposed header\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMaxAge: pulumi.Int(30),\n\t\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tFaultInjectionPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs{\n\t\t\t\t\t\t\t\t\tAbort: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs{\n\t\t\t\t\t\t\t\t\t\tHttpStatus: pulumi.Int(234),\n\t\t\t\t\t\t\t\t\t\tPercentage: pulumi.Float64(5.6),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tDelay: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs{\n\t\t\t\t\t\t\t\t\t\tFixedDelay: \u0026compute.URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs{\n\t\t\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"0\"),\n\t\t\t\t\t\t\t\t\t\t\tNanos: pulumi.Int(50000),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tPercentage: pulumi.Float64(7.8),\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\tRequestMirrorPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs{\n\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tRetryPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs{\n\t\t\t\t\t\t\t\t\tNumRetries: pulumi.Int(4),\n\t\t\t\t\t\t\t\t\tPerTryTimeout: \u0026compute.URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs{\n\t\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"30\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRetryConditions: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"deadline-exceeded\"),\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\tTimeout: \u0026compute.URLMapPathMatcherPathRuleRouteActionTimeoutArgs{\n\t\t\t\t\t\t\t\t\tSeconds: pulumi.String(\"20\"),\n\t\t\t\t\t\t\t\t\tNanos: pulumi.Int(750000000),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tUrlRewrite: \u0026compute.URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs{\n\t\t\t\t\t\t\t\t\tHostRewrite: pulumi.String(\"dev.example.com\"),\n\t\t\t\t\t\t\t\t\tPathPrefixRewrite: pulumi.String(\"/v1/api/\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tWeightedBackendServices: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs{\n\t\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t\t\tWeight: pulumi.Int(400),\n\t\t\t\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs{\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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},\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(URLMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOriginRegexes(\"abc.*\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .faultInjectionPolicy(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs.builder()\n .abort(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(234)\n .percentage(5.6)\n .build())\n .delay(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(URLMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(50000)\n .build())\n .percentage(7.8)\n .build())\n .build())\n .requestMirrorPolicy(URLMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .retryPolicy(URLMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(URLMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(URLMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(URLMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n pathRules:\n - paths:\n - /home\n routeAction:\n corsPolicy:\n allowCredentials: true\n allowHeaders:\n - Allowed content\n allowMethods:\n - GET\n allowOriginRegexes:\n - abc.*\n allowOrigins:\n - Allowed origin\n exposeHeaders:\n - Exposed header\n maxAge: 30\n disabled: false\n faultInjectionPolicy:\n abort:\n httpStatus: 234\n percentage: 5.6\n delay:\n fixedDelay:\n seconds: 0\n nanos: 50000\n percentage: 7.8\n requestMirrorPolicy:\n backendService: ${home.id}\n retryPolicy:\n numRetries: 4\n perTryTimeout:\n seconds: 30\n retryConditions:\n - 5xx\n - deadline-exceeded\n timeout:\n seconds: 20\n nanos: 7.5e+08\n urlRewrite:\n hostRewrite: dev.example.com\n pathPrefixRewrite: /v1/api/\n weightedBackendServices:\n - backendService: ${home.id}\n weight: 400\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe\n requestHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Traffic Director Path Partial\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HealthCheck(\"default\", {\n name: \"health-check\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst home = new gcp.compute.BackendService(\"home\", {\n name: \"home\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: _default.id,\n loadBalancingScheme: \"INTERNAL_SELF_MANAGED\",\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: home.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: home.id,\n pathRules: [{\n paths: [\"/home\"],\n routeAction: {\n corsPolicy: {\n allowCredentials: true,\n allowHeaders: [\"Allowed content\"],\n allowMethods: [\"GET\"],\n allowOriginRegexes: [\"abc.*\"],\n allowOrigins: [\"Allowed origin\"],\n exposeHeaders: [\"Exposed header\"],\n maxAge: 30,\n disabled: false,\n },\n weightedBackendServices: [{\n backendService: home.id,\n weight: 400,\n headerAction: {\n requestHeadersToRemoves: [\"RemoveMe\"],\n requestHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: true,\n }],\n responseHeadersToRemoves: [\"RemoveMe\"],\n responseHeadersToAdds: [{\n headerName: \"AddMe\",\n headerValue: \"MyValue\",\n replace: false,\n }],\n },\n }],\n },\n }],\n }],\n tests: [{\n service: home.id,\n host: \"hi.com\",\n path: \"/home\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HealthCheck(\"default\",\n name=\"health-check\",\n http_health_check={\n \"port\": 80,\n })\nhome = gcp.compute.BackendService(\"home\",\n name=\"home\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default.id,\n load_balancing_scheme=\"INTERNAL_SELF_MANAGED\")\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=home.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": home.id,\n \"path_rules\": [{\n \"paths\": [\"/home\"],\n \"route_action\": {\n \"cors_policy\": {\n \"allow_credentials\": True,\n \"allow_headers\": [\"Allowed content\"],\n \"allow_methods\": [\"GET\"],\n \"allow_origin_regexes\": [\"abc.*\"],\n \"allow_origins\": [\"Allowed origin\"],\n \"expose_headers\": [\"Exposed header\"],\n \"max_age\": 30,\n \"disabled\": False,\n },\n \"weighted_backend_services\": [{\n \"backend_service\": home.id,\n \"weight\": 400,\n \"header_action\": {\n \"request_headers_to_removes\": [\"RemoveMe\"],\n \"request_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": True,\n }],\n \"response_headers_to_removes\": [\"RemoveMe\"],\n \"response_headers_to_adds\": [{\n \"header_name\": \"AddMe\",\n \"header_value\": \"MyValue\",\n \"replace\": False,\n }],\n },\n }],\n },\n }],\n }],\n tests=[{\n \"service\": home.id,\n \"host\": \"hi.com\",\n \"path\": \"/home\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n HttpHealthCheck = new Gcp.Compute.Inputs.HealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var home = new Gcp.Compute.BackendService(\"home\", new()\n {\n Name = \"home\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = @default.Id,\n LoadBalancingScheme = \"INTERNAL_SELF_MANAGED\",\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = home.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = home.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/home\",\n },\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionArgs\n {\n CorsPolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs\n {\n AllowCredentials = true,\n AllowHeaders = new[]\n {\n \"Allowed content\",\n },\n AllowMethods = new[]\n {\n \"GET\",\n },\n AllowOriginRegexes = new[]\n {\n \"abc.*\",\n },\n AllowOrigins = new[]\n {\n \"Allowed origin\",\n },\n ExposeHeaders = new[]\n {\n \"Exposed header\",\n },\n MaxAge = 30,\n Disabled = false,\n },\n WeightedBackendServices = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs\n {\n BackendService = home.Id,\n Weight = 400,\n HeaderAction = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs\n {\n RequestHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = true,\n },\n },\n ResponseHeadersToRemoves = new[]\n {\n \"RemoveMe\",\n },\n ResponseHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs\n {\n HeaderName = \"AddMe\",\n HeaderValue = \"MyValue\",\n Replace = false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n Tests = new[]\n {\n new Gcp.Compute.Inputs.URLMapTestArgs\n {\n Service = home.Id,\n Host = \"hi.com\",\n Path = \"/home\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tHttpHealthCheck: \u0026compute.HealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thome, err := compute.NewBackendService(ctx, \"home\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"home\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: _default.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_SELF_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: home.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: home.ID(),\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/home\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tCorsPolicy: \u0026compute.URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs{\n\t\t\t\t\t\t\t\t\tAllowCredentials: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tAllowHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed content\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowMethods: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"GET\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOriginRegexes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"abc.*\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tAllowOrigins: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Allowed origin\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tExposeHeaders: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"Exposed header\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tMaxAge: pulumi.Int(30),\n\t\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tWeightedBackendServices: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs{\n\t\t\t\t\t\t\t\t\t\tBackendService: home.ID(),\n\t\t\t\t\t\t\t\t\t\tWeight: pulumi.Int(400),\n\t\t\t\t\t\t\t\t\t\tHeaderAction: \u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs{\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tRequestHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(true),\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\tResponseHeadersToRemoves: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"RemoveMe\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tResponseHeadersToAdds: compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"AddMe\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"MyValue\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tReplace: pulumi.Bool(false),\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},\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\tTests: compute.URLMapTestArray{\n\t\t\t\t\u0026compute.URLMapTestArgs{\n\t\t\t\t\tService: home.ID(),\n\t\t\t\t\tHost: pulumi.String(\"hi.com\"),\n\t\t\t\t\tPath: pulumi.String(\"/home\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HealthCheck(\"default\", HealthCheckArgs.builder()\n .name(\"health-check\")\n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new BackendService(\"home\", BackendServiceArgs.builder()\n .name(\"home\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(URLMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(URLMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOriginRegexes(\"abc.*\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .weightedBackendServices(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(URLMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(URLMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${home.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${home.id}\n pathRules:\n - paths:\n - /home\n routeAction:\n corsPolicy:\n allowCredentials: true\n allowHeaders:\n - Allowed content\n allowMethods:\n - GET\n allowOriginRegexes:\n - abc.*\n allowOrigins:\n - Allowed origin\n exposeHeaders:\n - Exposed header\n maxAge: 30\n disabled: false\n weightedBackendServices:\n - backendService: ${home.id}\n weight: 400\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe\n requestHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: true\n responseHeadersToRemoves:\n - RemoveMe\n responseHeadersToAdds:\n - headerName: AddMe\n headerValue: MyValue\n replace: false\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:BackendService\n properties:\n name: home\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${default.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n default:\n type: gcp:compute:HealthCheck\n properties:\n name: health-check\n httpHealthCheck:\n port: 80\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Header Based Routing\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"default\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_a = new gcp.compute.BackendService(\"service-a\", {\n name: \"service-a\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_b = new gcp.compute.BackendService(\"service-b\", {\n name: \"service-b\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"header-based routing example\",\n defaultService: _default.id,\n hostRules: [{\n hosts: [\"*\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: _default.id,\n routeRules: [\n {\n priority: 1,\n service: service_a.id,\n matchRules: [{\n prefixMatch: \"/\",\n ignoreCase: true,\n headerMatches: [{\n headerName: \"abtest\",\n exactMatch: \"a\",\n }],\n }],\n },\n {\n priority: 2,\n service: service_b.id,\n matchRules: [{\n ignoreCase: true,\n prefixMatch: \"/\",\n headerMatches: [{\n headerName: \"abtest\",\n exactMatch: \"b\",\n }],\n }],\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"default\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_a = gcp.compute.BackendService(\"service-a\",\n name=\"service-a\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_b = gcp.compute.BackendService(\"service-b\",\n name=\"service-b\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"header-based routing example\",\n default_service=default.id,\n host_rules=[{\n \"hosts\": [\"*\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": default.id,\n \"route_rules\": [\n {\n \"priority\": 1,\n \"service\": service_a.id,\n \"match_rules\": [{\n \"prefix_match\": \"/\",\n \"ignore_case\": True,\n \"header_matches\": [{\n \"header_name\": \"abtest\",\n \"exact_match\": \"a\",\n }],\n }],\n },\n {\n \"priority\": 2,\n \"service\": service_b.id,\n \"match_rules\": [{\n \"ignore_case\": True,\n \"prefix_match\": \"/\",\n \"header_matches\": [{\n \"header_name\": \"abtest\",\n \"exact_match\": \"b\",\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 defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"default\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_a = new Gcp.Compute.BackendService(\"service-a\", new()\n {\n Name = \"service-a\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_b = new Gcp.Compute.BackendService(\"service-b\", new()\n {\n Name = \"service-b\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"header-based routing example\",\n DefaultService = @default.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"*\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = @default.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n Service = service_a.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/\",\n IgnoreCase = true,\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"abtest\",\n ExactMatch = \"a\",\n },\n },\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 2,\n Service = service_b.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n IgnoreCase = true,\n PrefixMatch = \"/\",\n HeaderMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs\n {\n HeaderName = \"abtest\",\n ExactMatch = \"b\",\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-a\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-a\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-b\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-b\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"header-based routing example\"),\n\t\t\tDefaultService: _default.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: _default.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tService: service_a.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"a\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\n\t\t\t\t\t\t\tService: service_b.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tHeaderMatches: compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"b\"),\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"default\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_a = new BackendService(\"service-a\", BackendServiceArgs.builder()\n .name(\"service-a\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_b = new BackendService(\"service-b\", BackendServiceArgs.builder()\n .name(\"service-b\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"header-based routing example\")\n .defaultService(default_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"*\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(default_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(service_a.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/\")\n .ignoreCase(true)\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"abtest\")\n .exactMatch(\"a\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(2)\n .service(service_b.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .ignoreCase(true)\n .prefixMatch(\"/\")\n .headerMatches(URLMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"abtest\")\n .exactMatch(\"b\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: header-based routing example\n defaultService: ${default.id}\n hostRules:\n - hosts:\n - '*'\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${default.id}\n routeRules:\n - priority: 1\n service: ${[\"service-a\"].id}\n matchRules:\n - prefixMatch: /\n ignoreCase: true\n headerMatches:\n - headerName: abtest\n exactMatch: a\n - priority: 2\n service: ${[\"service-b\"].id}\n matchRules:\n - ignoreCase: true\n prefixMatch: /\n headerMatches:\n - headerName: abtest\n exactMatch: b\n default:\n type: gcp:compute:BackendService\n properties:\n name: default\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-a:\n type: gcp:compute:BackendService\n properties:\n name: service-a\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-b:\n type: gcp:compute:BackendService\n properties:\n name: service-b\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Parameter Based Routing\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultHttpHealthCheck = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n name: \"default\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_a = new gcp.compute.BackendService(\"service-a\", {\n name: \"service-a\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst service_b = new gcp.compute.BackendService(\"service-b\", {\n name: \"service-b\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n healthChecks: defaultHttpHealthCheck.id,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"parameter-based routing example\",\n defaultService: _default.id,\n hostRules: [{\n hosts: [\"*\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: _default.id,\n routeRules: [\n {\n priority: 1,\n service: service_a.id,\n matchRules: [{\n prefixMatch: \"/\",\n ignoreCase: true,\n queryParameterMatches: [{\n name: \"abtest\",\n exactMatch: \"a\",\n }],\n }],\n },\n {\n priority: 2,\n service: service_b.id,\n matchRules: [{\n ignoreCase: true,\n prefixMatch: \"/\",\n queryParameterMatches: [{\n name: \"abtest\",\n exactMatch: \"b\",\n }],\n }],\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_http_health_check = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ndefault = gcp.compute.BackendService(\"default\",\n name=\"default\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_a = gcp.compute.BackendService(\"service-a\",\n name=\"service-a\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nservice_b = gcp.compute.BackendService(\"service-b\",\n name=\"service-b\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n health_checks=default_http_health_check.id)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"parameter-based routing example\",\n default_service=default.id,\n host_rules=[{\n \"hosts\": [\"*\"],\n \"path_matcher\": \"allpaths\",\n }],\n path_matchers=[{\n \"name\": \"allpaths\",\n \"default_service\": default.id,\n \"route_rules\": [\n {\n \"priority\": 1,\n \"service\": service_a.id,\n \"match_rules\": [{\n \"prefix_match\": \"/\",\n \"ignore_case\": True,\n \"query_parameter_matches\": [{\n \"name\": \"abtest\",\n \"exact_match\": \"a\",\n }],\n }],\n },\n {\n \"priority\": 2,\n \"service\": service_b.id,\n \"match_rules\": [{\n \"ignore_case\": True,\n \"prefix_match\": \"/\",\n \"query_parameter_matches\": [{\n \"name\": \"abtest\",\n \"exact_match\": \"b\",\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 defaultHttpHealthCheck = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n Name = \"default\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_a = new Gcp.Compute.BackendService(\"service-a\", new()\n {\n Name = \"service-a\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var service_b = new Gcp.Compute.BackendService(\"service-b\", new()\n {\n Name = \"service-b\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n HealthChecks = defaultHttpHealthCheck.Id,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"parameter-based routing example\",\n DefaultService = @default.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"*\",\n },\n PathMatcher = \"allpaths\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"allpaths\",\n DefaultService = @default.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 1,\n Service = service_a.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PrefixMatch = \"/\",\n IgnoreCase = true,\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"abtest\",\n ExactMatch = \"a\",\n },\n },\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n Priority = 2,\n Service = service_b.Id,\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n IgnoreCase = true,\n PrefixMatch = \"/\",\n QueryParameterMatches = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs\n {\n Name = \"abtest\",\n ExactMatch = \"b\",\n },\n },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultHttpHealthCheck, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-a\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-a\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"service-b\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"service-b\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tHealthChecks: defaultHttpHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"parameter-based routing example\"),\n\t\t\tDefaultService: _default.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"allpaths\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"allpaths\"),\n\t\t\t\t\tDefaultService: _default.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tService: service_a.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"a\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\n\t\t\t\t\t\t\tService: service_b.ID(),\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tIgnoreCase: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\tPrefixMatch: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t\tQueryParameterMatches: compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArray{\n\t\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs{\n\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"abtest\"),\n\t\t\t\t\t\t\t\t\t\t\tExactMatch: pulumi.String(\"b\"),\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder()\n .name(\"default\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_a = new BackendService(\"service-a\", BackendServiceArgs.builder()\n .name(\"service-a\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var service_b = new BackendService(\"service-b\", BackendServiceArgs.builder()\n .name(\"service-b\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"parameter-based routing example\")\n .defaultService(default_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"*\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(default_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(service_a.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .prefixMatch(\"/\")\n .ignoreCase(true)\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"abtest\")\n .exactMatch(\"a\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .priority(2)\n .service(service_b.id())\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .ignoreCase(true)\n .prefixMatch(\"/\")\n .queryParameterMatches(URLMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"abtest\")\n .exactMatch(\"b\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: parameter-based routing example\n defaultService: ${default.id}\n hostRules:\n - hosts:\n - '*'\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${default.id}\n routeRules:\n - priority: 1\n service: ${[\"service-a\"].id}\n matchRules:\n - prefixMatch: /\n ignoreCase: true\n queryParameterMatches:\n - name: abtest\n exactMatch: a\n - priority: 2\n service: ${[\"service-b\"].id}\n matchRules:\n - ignoreCase: true\n prefixMatch: /\n queryParameterMatches:\n - name: abtest\n exactMatch: b\n default:\n type: gcp:compute:BackendService\n properties:\n name: default\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-a:\n type: gcp:compute:BackendService\n properties:\n name: service-a\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n service-b:\n type: gcp:compute:BackendService\n properties:\n name: service-b\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks: ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n name: default\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Path Template Match\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst cart_backend = new gcp.compute.BackendService(\"cart-backend\", {\n name: \"cart-service\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst user_backend = new gcp.compute.BackendService(\"user-backend\", {\n name: \"user-service\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst staticBucket = new gcp.storage.Bucket(\"static\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst static = new gcp.compute.BackendBucket(\"static\", {\n name: \"static-asset-backend-bucket\",\n bucketName: staticBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: static.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n }],\n pathMatchers: [{\n name: \"mysite\",\n defaultService: static.id,\n routeRules: [\n {\n matchRules: [{\n pathTemplateMatch: \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n }],\n service: cart_backend.id,\n priority: 1,\n routeAction: {\n urlRewrite: {\n pathTemplateRewrite: \"/{username}-{cartid}/\",\n },\n },\n },\n {\n matchRules: [{\n pathTemplateMatch: \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n }],\n service: user_backend.id,\n priority: 2,\n },\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\ncart_backend = gcp.compute.BackendService(\"cart-backend\",\n name=\"cart-service\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nuser_backend = gcp.compute.BackendService(\"user-backend\",\n name=\"user-service\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nstatic_bucket = gcp.storage.Bucket(\"static\",\n name=\"static-asset-bucket\",\n location=\"US\")\nstatic = gcp.compute.BackendBucket(\"static\",\n name=\"static-asset-backend-bucket\",\n bucket_name=static_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=static.id,\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n }],\n path_matchers=[{\n \"name\": \"mysite\",\n \"default_service\": static.id,\n \"route_rules\": [\n {\n \"match_rules\": [{\n \"path_template_match\": \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n }],\n \"service\": cart_backend.id,\n \"priority\": 1,\n \"route_action\": {\n \"url_rewrite\": {\n \"path_template_rewrite\": \"/{username}-{cartid}/\",\n },\n },\n },\n {\n \"match_rules\": [{\n \"path_template_match\": \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n }],\n \"service\": user_backend.id,\n \"priority\": 2,\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 @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var cart_backend = new Gcp.Compute.BackendService(\"cart-backend\", new()\n {\n Name = \"cart-service\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var user_backend = new Gcp.Compute.BackendService(\"user-backend\", new()\n {\n Name = \"user-service\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var staticBucket = new Gcp.Storage.Bucket(\"static\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var @static = new Gcp.Compute.BackendBucket(\"static\", new()\n {\n Name = \"static-asset-backend-bucket\",\n BucketName = staticBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = @static.Id,\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = @static.Id,\n RouteRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PathTemplateMatch = \"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\",\n },\n },\n Service = cart_backend.Id,\n Priority = 1,\n RouteAction = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleRouteActionArgs\n {\n UrlRewrite = new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs\n {\n PathTemplateRewrite = \"/{username}-{cartid}/\",\n },\n },\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleArgs\n {\n MatchRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherRouteRuleMatchRuleArgs\n {\n PathTemplateMatch = \"/xyzwebservices/v2/xyz/users/*/accountinfo/*\",\n },\n },\n Service = user_backend.Id,\n Priority = 2,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"cart-backend\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"cart-service\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewBackendService(ctx, \"user-backend\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"user-service\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstaticBucket, err := storage.NewBucket(ctx, \"static\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatic, err := compute.NewBackendBucket(ctx, \"static\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-backend-bucket\"),\n\t\t\tBucketName: staticBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: static.ID(),\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: static.ID(),\n\t\t\t\t\tRouteRules: compute.URLMapPathMatcherRouteRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateMatch: pulumi.String(\"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: cart_backend.ID(),\n\t\t\t\t\t\t\tPriority: pulumi.Int(1),\n\t\t\t\t\t\t\tRouteAction: \u0026compute.URLMapPathMatcherRouteRuleRouteActionArgs{\n\t\t\t\t\t\t\t\tUrlRewrite: \u0026compute.URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateRewrite: pulumi.String(\"/{username}-{cartid}/\"),\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\u0026compute.URLMapPathMatcherRouteRuleArgs{\n\t\t\t\t\t\t\tMatchRules: compute.URLMapPathMatcherRouteRuleMatchRuleArray{\n\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherRouteRuleMatchRuleArgs{\n\t\t\t\t\t\t\t\t\tPathTemplateMatch: pulumi.String(\"/xyzwebservices/v2/xyz/users/*/accountinfo/*\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: user_backend.ID(),\n\t\t\t\t\t\t\tPriority: pulumi.Int(2),\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.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var cart_backend = new BackendService(\"cart-backend\", BackendServiceArgs.builder()\n .name(\"cart-service\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var user_backend = new BackendService(\"user-backend\", BackendServiceArgs.builder()\n .name(\"user-service\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var staticBucket = new Bucket(\"staticBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var static_ = new BackendBucket(\"static\", BackendBucketArgs.builder()\n .name(\"static-asset-backend-bucket\")\n .bucketName(staticBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(static_.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(static_.id())\n .routeRules( \n URLMapPathMatcherRouteRuleArgs.builder()\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .pathTemplateMatch(\"/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\")\n .build())\n .service(cart_backend.id())\n .priority(1)\n .routeAction(URLMapPathMatcherRouteRuleRouteActionArgs.builder()\n .urlRewrite(URLMapPathMatcherRouteRuleRouteActionUrlRewriteArgs.builder()\n .pathTemplateRewrite(\"/{username}-{cartid}/\")\n .build())\n .build())\n .build(),\n URLMapPathMatcherRouteRuleArgs.builder()\n .matchRules(URLMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .pathTemplateMatch(\"/xyzwebservices/v2/xyz/users/*/accountinfo/*\")\n .build())\n .service(user_backend.id())\n .priority(2)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${static.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n pathMatchers:\n - name: mysite\n defaultService: ${static.id}\n routeRules:\n - matchRules:\n - pathTemplateMatch: /xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}\n service: ${[\"cart-backend\"].id}\n priority: 1\n routeAction:\n urlRewrite:\n pathTemplateRewrite: /{username}-{cartid}/\n - matchRules:\n - pathTemplateMatch: /xyzwebservices/v2/xyz/users/*/accountinfo/*\n service: ${[\"user-backend\"].id}\n priority: 2\n cart-backend:\n type: gcp:compute:BackendService\n properties:\n name: cart-service\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n user-backend:\n type: gcp:compute:BackendService\n properties:\n name: user-service\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n static:\n type: gcp:compute:BackendBucket\n properties:\n name: static-asset-backend-bucket\n bucketName: ${staticBucket.name}\n enableCdn: true\n staticBucket:\n type: gcp:storage:Bucket\n name: static\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Url Map Custom Error Response Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.HttpHealthCheck(\"default\", {\n name: \"health-check\",\n requestPath: \"/\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n});\nconst example = new gcp.compute.BackendService(\"example\", {\n name: \"login\",\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n healthChecks: _default.id,\n});\nconst errorBucket = new gcp.storage.Bucket(\"error\", {\n name: \"static-asset-bucket\",\n location: \"US\",\n});\nconst error = new gcp.compute.BackendBucket(\"error\", {\n name: \"error-backend-bucket\",\n bucketName: errorBucket.name,\n enableCdn: true,\n});\nconst urlmap = new gcp.compute.URLMap(\"urlmap\", {\n name: \"urlmap\",\n description: \"a description\",\n defaultService: example.id,\n defaultCustomErrorResponsePolicy: {\n errorResponseRules: [{\n matchResponseCodes: [\"5xx\"],\n path: \"/internal_error.html\",\n overrideResponseCode: 502,\n }],\n errorService: error.id,\n },\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"mysite\",\n }],\n pathMatchers: [{\n name: \"mysite\",\n defaultService: example.id,\n defaultCustomErrorResponsePolicy: {\n errorResponseRules: [\n {\n matchResponseCodes: [\n \"4xx\",\n \"5xx\",\n ],\n path: \"/login_error.html\",\n overrideResponseCode: 404,\n },\n {\n matchResponseCodes: [\"503\"],\n path: \"/bad_gateway.html\",\n overrideResponseCode: 502,\n },\n ],\n errorService: error.id,\n },\n pathRules: [{\n paths: [\"/private/*\"],\n service: example.id,\n customErrorResponsePolicy: {\n errorResponseRules: [{\n matchResponseCodes: [\"4xx\"],\n path: \"/login.html\",\n overrideResponseCode: 401,\n }],\n errorService: error.id,\n },\n }],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.HttpHealthCheck(\"default\",\n name=\"health-check\",\n request_path=\"/\",\n check_interval_sec=1,\n timeout_sec=1)\nexample = gcp.compute.BackendService(\"example\",\n name=\"login\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\",\n health_checks=default.id)\nerror_bucket = gcp.storage.Bucket(\"error\",\n name=\"static-asset-bucket\",\n location=\"US\")\nerror = gcp.compute.BackendBucket(\"error\",\n name=\"error-backend-bucket\",\n bucket_name=error_bucket.name,\n enable_cdn=True)\nurlmap = gcp.compute.URLMap(\"urlmap\",\n name=\"urlmap\",\n description=\"a description\",\n default_service=example.id,\n default_custom_error_response_policy={\n \"error_response_rules\": [{\n \"match_response_codes\": [\"5xx\"],\n \"path\": \"/internal_error.html\",\n \"override_response_code\": 502,\n }],\n \"error_service\": error.id,\n },\n host_rules=[{\n \"hosts\": [\"mysite.com\"],\n \"path_matcher\": \"mysite\",\n }],\n path_matchers=[{\n \"name\": \"mysite\",\n \"default_service\": example.id,\n \"default_custom_error_response_policy\": {\n \"error_response_rules\": [\n {\n \"match_response_codes\": [\n \"4xx\",\n \"5xx\",\n ],\n \"path\": \"/login_error.html\",\n \"override_response_code\": 404,\n },\n {\n \"match_response_codes\": [\"503\"],\n \"path\": \"/bad_gateway.html\",\n \"override_response_code\": 502,\n },\n ],\n \"error_service\": error.id,\n },\n \"path_rules\": [{\n \"paths\": [\"/private/*\"],\n \"service\": example.id,\n \"custom_error_response_policy\": {\n \"error_response_rules\": [{\n \"match_response_codes\": [\"4xx\"],\n \"path\": \"/login.html\",\n \"override_response_code\": 401,\n }],\n \"error_service\": error.id,\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 @default = new Gcp.Compute.HttpHealthCheck(\"default\", new()\n {\n Name = \"health-check\",\n RequestPath = \"/\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n });\n\n var example = new Gcp.Compute.BackendService(\"example\", new()\n {\n Name = \"login\",\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n HealthChecks = @default.Id,\n });\n\n var errorBucket = new Gcp.Storage.Bucket(\"error\", new()\n {\n Name = \"static-asset-bucket\",\n Location = \"US\",\n });\n\n var error = new Gcp.Compute.BackendBucket(\"error\", new()\n {\n Name = \"error-backend-bucket\",\n BucketName = errorBucket.Name,\n EnableCdn = true,\n });\n\n var urlmap = new Gcp.Compute.URLMap(\"urlmap\", new()\n {\n Name = \"urlmap\",\n Description = \"a description\",\n DefaultService = example.Id,\n DefaultCustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapDefaultCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"5xx\",\n },\n Path = \"/internal_error.html\",\n OverrideResponseCode = 502,\n },\n },\n ErrorService = error.Id,\n },\n HostRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapHostRuleArgs\n {\n Hosts = new[]\n {\n \"mysite.com\",\n },\n PathMatcher = \"mysite\",\n },\n },\n PathMatchers = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherArgs\n {\n Name = \"mysite\",\n DefaultService = example.Id,\n DefaultCustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"4xx\",\n \"5xx\",\n },\n Path = \"/login_error.html\",\n OverrideResponseCode = 404,\n },\n new Gcp.Compute.Inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"503\",\n },\n Path = \"/bad_gateway.html\",\n OverrideResponseCode = 502,\n },\n },\n ErrorService = error.Id,\n },\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/private/*\",\n },\n Service = example.Id,\n CustomErrorResponsePolicy = new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs\n {\n ErrorResponseRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs\n {\n MatchResponseCodes = new[]\n {\n \"4xx\",\n },\n Path = \"/login.html\",\n OverrideResponseCode = 401,\n },\n },\n ErrorService = error.Id,\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewHttpHealthCheck(ctx, \"default\", \u0026compute.HttpHealthCheckArgs{\n\t\t\tName: pulumi.String(\"health-check\"),\n\t\t\tRequestPath: pulumi.String(\"/\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := compute.NewBackendService(ctx, \"example\", \u0026compute.BackendServiceArgs{\n\t\t\tName: pulumi.String(\"login\"),\n\t\t\tPortName: pulumi.String(\"http\"),\n\t\t\tProtocol: pulumi.String(\"HTTP\"),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t\tHealthChecks: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terrorBucket, err := storage.NewBucket(ctx, \"error\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"static-asset-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terror, err := compute.NewBackendBucket(ctx, \"error\", \u0026compute.BackendBucketArgs{\n\t\t\tName: pulumi.String(\"error-backend-bucket\"),\n\t\t\tBucketName: errorBucket.Name,\n\t\t\tEnableCdn: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewURLMap(ctx, \"urlmap\", \u0026compute.URLMapArgs{\n\t\t\tName: pulumi.String(\"urlmap\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: example.ID(),\n\t\t\tDefaultCustomErrorResponsePolicy: \u0026compute.URLMapDefaultCustomErrorResponsePolicyArgs{\n\t\t\t\tErrorResponseRules: compute.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\u0026compute.URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPath: pulumi.String(\"/internal_error.html\"),\n\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(502),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tErrorService: error.ID(),\n\t\t\t},\n\t\t\tHostRules: compute.URLMapHostRuleArray{\n\t\t\t\t\u0026compute.URLMapHostRuleArgs{\n\t\t\t\t\tHosts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"mysite.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tPathMatcher: pulumi.String(\"mysite\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPathMatchers: compute.URLMapPathMatcherArray{\n\t\t\t\t\u0026compute.URLMapPathMatcherArgs{\n\t\t\t\t\tName: pulumi.String(\"mysite\"),\n\t\t\t\t\tDefaultService: example.ID(),\n\t\t\t\t\tDefaultCustomErrorResponsePolicy: \u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs{\n\t\t\t\t\t\tErrorResponseRules: compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"4xx\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"5xx\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/login_error.html\"),\n\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(404),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"503\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/bad_gateway.html\"),\n\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(502),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tErrorService: error.ID(),\n\t\t\t\t\t},\n\t\t\t\t\tPathRules: compute.URLMapPathMatcherPathRuleArray{\n\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleArgs{\n\t\t\t\t\t\t\tPaths: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"/private/*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: example.ID(),\n\t\t\t\t\t\t\tCustomErrorResponsePolicy: \u0026compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs{\n\t\t\t\t\t\t\t\tErrorResponseRules: compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArray{\n\t\t\t\t\t\t\t\t\t\u0026compute.URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs{\n\t\t\t\t\t\t\t\t\t\tMatchResponseCodes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"4xx\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"/login.html\"),\n\t\t\t\t\t\t\t\t\t\tOverrideResponseCode: pulumi.Int(401),\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\tErrorService: error.ID(),\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.compute.HttpHealthCheck;\nimport com.pulumi.gcp.compute.HttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.compute.BackendBucket;\nimport com.pulumi.gcp.compute.BackendBucketArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapDefaultCustomErrorResponsePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder()\n .name(\"health-check\")\n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var example = new BackendService(\"example\", BackendServiceArgs.builder()\n .name(\"login\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .healthChecks(default_.id())\n .build());\n\n var errorBucket = new Bucket(\"errorBucket\", BucketArgs.builder()\n .name(\"static-asset-bucket\")\n .location(\"US\")\n .build());\n\n var error = new BackendBucket(\"error\", BackendBucketArgs.builder()\n .name(\"error-backend-bucket\")\n .bucketName(errorBucket.name())\n .enableCdn(true)\n .build());\n\n var urlmap = new URLMap(\"urlmap\", URLMapArgs.builder()\n .name(\"urlmap\")\n .description(\"a description\")\n .defaultService(example.id())\n .defaultCustomErrorResponsePolicy(URLMapDefaultCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules(URLMapDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"5xx\")\n .path(\"/internal_error.html\")\n .overrideResponseCode(502)\n .build())\n .errorService(error.id())\n .build())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"mysite\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"mysite\")\n .defaultService(example.id())\n .defaultCustomErrorResponsePolicy(URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules( \n URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes( \n \"4xx\",\n \"5xx\")\n .path(\"/login_error.html\")\n .overrideResponseCode(404)\n .build(),\n URLMapPathMatcherDefaultCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"503\")\n .path(\"/bad_gateway.html\")\n .overrideResponseCode(502)\n .build())\n .errorService(error.id())\n .build())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/private/*\")\n .service(example.id())\n .customErrorResponsePolicy(URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs.builder()\n .errorResponseRules(URLMapPathMatcherPathRuleCustomErrorResponsePolicyErrorResponseRuleArgs.builder()\n .matchResponseCodes(\"4xx\")\n .path(\"/login.html\")\n .overrideResponseCode(401)\n .build())\n .errorService(error.id())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlmap:\n type: gcp:compute:URLMap\n properties:\n name: urlmap\n description: a description\n defaultService: ${example.id}\n defaultCustomErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 5xx\n path: /internal_error.html\n overrideResponseCode: 502\n errorService: ${error.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: mysite\n pathMatchers:\n - name: mysite\n defaultService: ${example.id}\n defaultCustomErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 4xx\n - 5xx\n path: /login_error.html\n overrideResponseCode: 404\n - matchResponseCodes:\n - '503'\n path: /bad_gateway.html\n overrideResponseCode: 502\n errorService: ${error.id}\n pathRules:\n - paths:\n - /private/*\n service: ${example.id}\n customErrorResponsePolicy:\n errorResponseRules:\n - matchResponseCodes:\n - 4xx\n path: /login.html\n overrideResponseCode: 401\n errorService: ${error.id}\n example:\n type: gcp:compute:BackendService\n properties:\n name: login\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n healthChecks: ${default.id}\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n name: health-check\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n error:\n type: gcp:compute:BackendBucket\n properties:\n name: error-backend-bucket\n bucketName: ${errorBucket.name}\n enableCdn: true\n errorBucket:\n type: gcp:storage:Bucket\n name: error\n properties:\n name: static-asset-bucket\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUrlMap can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/urlMaps/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, UrlMap can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default projects/{{project}}/global/urlMaps/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/uRLMap:URLMap default {{name}}\n```\n\n", "properties": { "creationTimestamp": { "type": "string", @@ -194046,7 +195550,7 @@ } }, "gcp:databasemigrationservice/connectionProfile:ConnectionProfile": { - "description": "A connection profile definition.\n\n\nTo get more information about ConnectionProfile, see:\n\n* [API documentation](https://cloud.google.com/database-migration/docs/reference/rest/v1/projects.locations.connectionProfiles/create)\n* How-to Guides\n * [Database Migration](https://cloud.google.com/database-migration/docs/)\n\n\n\n## Example Usage\n\n### Database Migration Service Connection Profile Cloudsql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cloudsqldb = new gcp.sql.DatabaseInstance(\"cloudsqldb\", {\n name: \"my-database\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-n1-standard-1\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst sqlClientCert = new gcp.sql.SslCert(\"sql_client_cert\", {\n commonName: \"my-cert\",\n instance: cloudsqldb.name,\n}, {\n dependsOn: [cloudsqldb],\n});\nconst sqldbUser = new gcp.sql.User(\"sqldb_user\", {\n name: \"my-username\",\n instance: cloudsqldb.name,\n password: \"my-password\",\n}, {\n dependsOn: [sqlClientCert],\n});\nconst cloudsqlprofile = new gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-fromprofileid\",\n displayName: \"my-fromprofileid_display\",\n labels: {\n foo: \"bar\",\n },\n mysql: {\n host: cloudsqldb.ipAddresses.apply(ipAddresses =\u003e ipAddresses[0].ipAddress),\n port: 3306,\n username: sqldbUser.name,\n password: sqldbUser.password,\n ssl: {\n clientKey: sqlClientCert.privateKey,\n clientCertificate: sqlClientCert.cert,\n caCertificate: sqlClientCert.serverCaCert,\n },\n cloudSqlId: \"my-database\",\n },\n}, {\n dependsOn: [sqldbUser],\n});\nconst cloudsqlprofileDestination = new gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile_destination\", {\n location: \"us-central1\",\n connectionProfileId: \"my-toprofileid\",\n displayName: \"my-toprofileid_displayname\",\n labels: {\n foo: \"bar\",\n },\n cloudsql: {\n settings: {\n databaseVersion: \"MYSQL_5_7\",\n userLabels: {\n cloudfoo: \"cloudbar\",\n },\n tier: \"db-n1-standard-1\",\n edition: \"ENTERPRISE\",\n storageAutoResizeLimit: \"0\",\n activationPolicy: \"ALWAYS\",\n ipConfig: {\n enableIpv4: true,\n requireSsl: true,\n },\n autoStorageIncrease: true,\n dataDiskType: \"PD_HDD\",\n dataDiskSizeGb: \"11\",\n zone: \"us-central1-b\",\n sourceId: project.then(project =\u003e `projects/${project.projectId}/locations/us-central1/connectionProfiles/my-fromprofileid`),\n rootPassword: \"testpasscloudsql\",\n },\n },\n}, {\n dependsOn: [cloudsqlprofile],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncloudsqldb = gcp.sql.DatabaseInstance(\"cloudsqldb\",\n name=\"my-database\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-n1-standard-1\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nsql_client_cert = gcp.sql.SslCert(\"sql_client_cert\",\n common_name=\"my-cert\",\n instance=cloudsqldb.name,\n opts = pulumi.ResourceOptions(depends_on=[cloudsqldb]))\nsqldb_user = gcp.sql.User(\"sqldb_user\",\n name=\"my-username\",\n instance=cloudsqldb.name,\n password=\"my-password\",\n opts = pulumi.ResourceOptions(depends_on=[sql_client_cert]))\ncloudsqlprofile = gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-fromprofileid\",\n display_name=\"my-fromprofileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n mysql={\n \"host\": cloudsqldb.ip_addresses[0].ip_address,\n \"port\": 3306,\n \"username\": sqldb_user.name,\n \"password\": sqldb_user.password,\n \"ssl\": {\n \"client_key\": sql_client_cert.private_key,\n \"client_certificate\": sql_client_cert.cert,\n \"ca_certificate\": sql_client_cert.server_ca_cert,\n },\n \"cloud_sql_id\": \"my-database\",\n },\n opts = pulumi.ResourceOptions(depends_on=[sqldb_user]))\ncloudsqlprofile_destination = gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile_destination\",\n location=\"us-central1\",\n connection_profile_id=\"my-toprofileid\",\n display_name=\"my-toprofileid_displayname\",\n labels={\n \"foo\": \"bar\",\n },\n cloudsql={\n \"settings\": {\n \"database_version\": \"MYSQL_5_7\",\n \"user_labels\": {\n \"cloudfoo\": \"cloudbar\",\n },\n \"tier\": \"db-n1-standard-1\",\n \"edition\": \"ENTERPRISE\",\n \"storage_auto_resize_limit\": \"0\",\n \"activation_policy\": \"ALWAYS\",\n \"ip_config\": {\n \"enable_ipv4\": True,\n \"require_ssl\": True,\n },\n \"auto_storage_increase\": True,\n \"data_disk_type\": \"PD_HDD\",\n \"data_disk_size_gb\": \"11\",\n \"zone\": \"us-central1-b\",\n \"source_id\": f\"projects/{project.project_id}/locations/us-central1/connectionProfiles/my-fromprofileid\",\n \"root_password\": \"testpasscloudsql\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[cloudsqlprofile]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cloudsqldb = new Gcp.Sql.DatabaseInstance(\"cloudsqldb\", new()\n {\n Name = \"my-database\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-n1-standard-1\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var sqlClientCert = new Gcp.Sql.SslCert(\"sql_client_cert\", new()\n {\n CommonName = \"my-cert\",\n Instance = cloudsqldb.Name,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cloudsqldb,\n },\n });\n\n var sqldbUser = new Gcp.Sql.User(\"sqldb_user\", new()\n {\n Name = \"my-username\",\n Instance = cloudsqldb.Name,\n Password = \"my-password\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqlClientCert,\n },\n });\n\n var cloudsqlprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"cloudsqlprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-fromprofileid\",\n DisplayName = \"my-fromprofileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Mysql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlArgs\n {\n Host = cloudsqldb.IpAddresses.Apply(ipAddresses =\u003e ipAddresses[0].IpAddress),\n Port = 3306,\n Username = sqldbUser.Name,\n Password = sqldbUser.Password,\n Ssl = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlSslArgs\n {\n ClientKey = sqlClientCert.PrivateKey,\n ClientCertificate = sqlClientCert.Cert,\n CaCertificate = sqlClientCert.ServerCaCert,\n },\n CloudSqlId = \"my-database\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqldbUser,\n },\n });\n\n var cloudsqlprofileDestination = new Gcp.DatabaseMigrationService.ConnectionProfile(\"cloudsqlprofile_destination\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-toprofileid\",\n DisplayName = \"my-toprofileid_displayname\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Cloudsql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlArgs\n {\n Settings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlSettingsArgs\n {\n DatabaseVersion = \"MYSQL_5_7\",\n UserLabels = \n {\n { \"cloudfoo\", \"cloudbar\" },\n },\n Tier = \"db-n1-standard-1\",\n Edition = \"ENTERPRISE\",\n StorageAutoResizeLimit = \"0\",\n ActivationPolicy = \"ALWAYS\",\n IpConfig = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlSettingsIpConfigArgs\n {\n EnableIpv4 = true,\n RequireSsl = true,\n },\n AutoStorageIncrease = true,\n DataDiskType = \"PD_HDD\",\n DataDiskSizeGb = \"11\",\n Zone = \"us-central1-b\",\n SourceId = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}/locations/us-central1/connectionProfiles/my-fromprofileid\",\n RootPassword = \"testpasscloudsql\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cloudsqlprofile,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudsqldb, err := sql.NewDatabaseInstance(ctx, \"cloudsqldb\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqlClientCert, err := sql.NewSslCert(ctx, \"sql_client_cert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"my-cert\"),\n\t\t\tInstance: cloudsqldb.Name,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcloudsqldb,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqldbUser, err := sql.NewUser(ctx, \"sqldb_user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"my-username\"),\n\t\t\tInstance: cloudsqldb.Name,\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqlClientCert,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudsqlprofile, err := databasemigrationservice.NewConnectionProfile(ctx, \"cloudsqlprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-fromprofileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-fromprofileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMysql: \u0026databasemigrationservice.ConnectionProfileMysqlArgs{\n\t\t\t\tHost: cloudsqldb.IpAddresses.ApplyT(func(ipAddresses []sql.DatabaseInstanceIpAddress) (*string, error) {\n\t\t\t\t\treturn \u0026ipAddresses[0].IpAddress, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tPort: pulumi.Int(3306),\n\t\t\t\tUsername: sqldbUser.Name,\n\t\t\t\tPassword: sqldbUser.Password,\n\t\t\t\tSsl: \u0026databasemigrationservice.ConnectionProfileMysqlSslArgs{\n\t\t\t\t\tClientKey: sqlClientCert.PrivateKey,\n\t\t\t\t\tClientCertificate: sqlClientCert.Cert,\n\t\t\t\t\tCaCertificate: sqlClientCert.ServerCaCert,\n\t\t\t\t},\n\t\t\t\tCloudSqlId: pulumi.String(\"my-database\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqldbUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"cloudsqlprofile_destination\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-toprofileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-toprofileid_displayname\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tCloudsql: \u0026databasemigrationservice.ConnectionProfileCloudsqlArgs{\n\t\t\t\tSettings: \u0026databasemigrationservice.ConnectionProfileCloudsqlSettingsArgs{\n\t\t\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"cloudfoo\": pulumi.String(\"cloudbar\"),\n\t\t\t\t\t},\n\t\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\t\tEdition: pulumi.String(\"ENTERPRISE\"),\n\t\t\t\t\tStorageAutoResizeLimit: pulumi.String(\"0\"),\n\t\t\t\t\tActivationPolicy: pulumi.String(\"ALWAYS\"),\n\t\t\t\t\tIpConfig: \u0026databasemigrationservice.ConnectionProfileCloudsqlSettingsIpConfigArgs{\n\t\t\t\t\t\tEnableIpv4: pulumi.Bool(true),\n\t\t\t\t\t\tRequireSsl: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tAutoStorageIncrease: pulumi.Bool(true),\n\t\t\t\t\tDataDiskType: pulumi.String(\"PD_HDD\"),\n\t\t\t\t\tDataDiskSizeGb: pulumi.String(\"11\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t\tSourceId: pulumi.Sprintf(\"projects/%v/locations/us-central1/connectionProfiles/my-fromprofileid\", project.ProjectId),\n\t\t\t\t\tRootPassword: pulumi.String(\"testpasscloudsql\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcloudsqlprofile,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlSslArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlSettingsIpConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cloudsqldb = new DatabaseInstance(\"cloudsqldb\", DatabaseInstanceArgs.builder()\n .name(\"my-database\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-n1-standard-1\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var sqlClientCert = new SslCert(\"sqlClientCert\", SslCertArgs.builder()\n .commonName(\"my-cert\")\n .instance(cloudsqldb.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cloudsqldb)\n .build());\n\n var sqldbUser = new User(\"sqldbUser\", UserArgs.builder()\n .name(\"my-username\")\n .instance(cloudsqldb.name())\n .password(\"my-password\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqlClientCert)\n .build());\n\n var cloudsqlprofile = new ConnectionProfile(\"cloudsqlprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-fromprofileid\")\n .displayName(\"my-fromprofileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .mysql(ConnectionProfileMysqlArgs.builder()\n .host(cloudsqldb.ipAddresses().applyValue(ipAddresses -\u003e ipAddresses[0].ipAddress()))\n .port(3306)\n .username(sqldbUser.name())\n .password(sqldbUser.password())\n .ssl(ConnectionProfileMysqlSslArgs.builder()\n .clientKey(sqlClientCert.privateKey())\n .clientCertificate(sqlClientCert.cert())\n .caCertificate(sqlClientCert.serverCaCert())\n .build())\n .cloudSqlId(\"my-database\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqldbUser)\n .build());\n\n var cloudsqlprofileDestination = new ConnectionProfile(\"cloudsqlprofileDestination\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-toprofileid\")\n .displayName(\"my-toprofileid_displayname\")\n .labels(Map.of(\"foo\", \"bar\"))\n .cloudsql(ConnectionProfileCloudsqlArgs.builder()\n .settings(ConnectionProfileCloudsqlSettingsArgs.builder()\n .databaseVersion(\"MYSQL_5_7\")\n .userLabels(Map.of(\"cloudfoo\", \"cloudbar\"))\n .tier(\"db-n1-standard-1\")\n .edition(\"ENTERPRISE\")\n .storageAutoResizeLimit(\"0\")\n .activationPolicy(\"ALWAYS\")\n .ipConfig(ConnectionProfileCloudsqlSettingsIpConfigArgs.builder()\n .enableIpv4(true)\n .requireSsl(true)\n .build())\n .autoStorageIncrease(true)\n .dataDiskType(\"PD_HDD\")\n .dataDiskSizeGb(\"11\")\n .zone(\"us-central1-b\")\n .sourceId(String.format(\"projects/%s/locations/us-central1/connectionProfiles/my-fromprofileid\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId())))\n .rootPassword(\"testpasscloudsql\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cloudsqlprofile)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudsqldb:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-n1-standard-1\n deletionProtectionEnabled: false\n deletionProtection: false\n sqlClientCert:\n type: gcp:sql:SslCert\n name: sql_client_cert\n properties:\n commonName: my-cert\n instance: ${cloudsqldb.name}\n options:\n dependsOn:\n - ${cloudsqldb}\n sqldbUser:\n type: gcp:sql:User\n name: sqldb_user\n properties:\n name: my-username\n instance: ${cloudsqldb.name}\n password: my-password\n options:\n dependsOn:\n - ${sqlClientCert}\n cloudsqlprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-fromprofileid\n displayName: my-fromprofileid_display\n labels:\n foo: bar\n mysql:\n host: ${cloudsqldb.ipAddresses[0].ipAddress}\n port: 3306\n username: ${sqldbUser.name}\n password: ${sqldbUser.password}\n ssl:\n clientKey: ${sqlClientCert.privateKey}\n clientCertificate: ${sqlClientCert.cert}\n caCertificate: ${sqlClientCert.serverCaCert}\n cloudSqlId: my-database\n options:\n dependsOn:\n - ${sqldbUser}\n cloudsqlprofileDestination:\n type: gcp:databasemigrationservice:ConnectionProfile\n name: cloudsqlprofile_destination\n properties:\n location: us-central1\n connectionProfileId: my-toprofileid\n displayName: my-toprofileid_displayname\n labels:\n foo: bar\n cloudsql:\n settings:\n databaseVersion: MYSQL_5_7\n userLabels:\n cloudfoo: cloudbar\n tier: db-n1-standard-1\n edition: ENTERPRISE\n storageAutoResizeLimit: '0'\n activationPolicy: ALWAYS\n ipConfig:\n enableIpv4: true\n requireSsl: true\n autoStorageIncrease: true\n dataDiskType: PD_HDD\n dataDiskSizeGb: '11'\n zone: us-central1-b\n sourceId: projects/${project.projectId}/locations/us-central1/connectionProfiles/my-fromprofileid\n rootPassword: testpasscloudsql\n options:\n dependsOn:\n - ${cloudsqlprofile}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Postgres\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst postgresqldb = new gcp.sql.DatabaseInstance(\"postgresqldb\", {\n name: \"my-database\",\n databaseVersion: \"POSTGRES_12\",\n settings: {\n tier: \"db-custom-2-13312\",\n },\n deletionProtection: false,\n});\nconst sqlClientCert = new gcp.sql.SslCert(\"sql_client_cert\", {\n commonName: \"my-cert\",\n instance: postgresqldb.name,\n}, {\n dependsOn: [postgresqldb],\n});\nconst sqldbUser = new gcp.sql.User(\"sqldb_user\", {\n name: \"my-username\",\n instance: postgresqldb.name,\n password: \"my-password\",\n}, {\n dependsOn: [sqlClientCert],\n});\nconst postgresprofile = new gcp.databasemigrationservice.ConnectionProfile(\"postgresprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n host: postgresqldb.ipAddresses.apply(ipAddresses =\u003e ipAddresses[0].ipAddress),\n port: 5432,\n username: sqldbUser.name,\n password: sqldbUser.password,\n ssl: {\n clientKey: sqlClientCert.privateKey,\n clientCertificate: sqlClientCert.cert,\n caCertificate: sqlClientCert.serverCaCert,\n },\n cloudSqlId: \"my-database\",\n },\n}, {\n dependsOn: [sqldbUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npostgresqldb = gcp.sql.DatabaseInstance(\"postgresqldb\",\n name=\"my-database\",\n database_version=\"POSTGRES_12\",\n settings={\n \"tier\": \"db-custom-2-13312\",\n },\n deletion_protection=False)\nsql_client_cert = gcp.sql.SslCert(\"sql_client_cert\",\n common_name=\"my-cert\",\n instance=postgresqldb.name,\n opts = pulumi.ResourceOptions(depends_on=[postgresqldb]))\nsqldb_user = gcp.sql.User(\"sqldb_user\",\n name=\"my-username\",\n instance=postgresqldb.name,\n password=\"my-password\",\n opts = pulumi.ResourceOptions(depends_on=[sql_client_cert]))\npostgresprofile = gcp.databasemigrationservice.ConnectionProfile(\"postgresprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"host\": postgresqldb.ip_addresses[0].ip_address,\n \"port\": 5432,\n \"username\": sqldb_user.name,\n \"password\": sqldb_user.password,\n \"ssl\": {\n \"client_key\": sql_client_cert.private_key,\n \"client_certificate\": sql_client_cert.cert,\n \"ca_certificate\": sql_client_cert.server_ca_cert,\n },\n \"cloud_sql_id\": \"my-database\",\n },\n opts = pulumi.ResourceOptions(depends_on=[sqldb_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var postgresqldb = new Gcp.Sql.DatabaseInstance(\"postgresqldb\", new()\n {\n Name = \"my-database\",\n DatabaseVersion = \"POSTGRES_12\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-custom-2-13312\",\n },\n DeletionProtection = false,\n });\n\n var sqlClientCert = new Gcp.Sql.SslCert(\"sql_client_cert\", new()\n {\n CommonName = \"my-cert\",\n Instance = postgresqldb.Name,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n postgresqldb,\n },\n });\n\n var sqldbUser = new Gcp.Sql.User(\"sqldb_user\", new()\n {\n Name = \"my-username\",\n Instance = postgresqldb.Name,\n Password = \"my-password\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqlClientCert,\n },\n });\n\n var postgresprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"postgresprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n Host = postgresqldb.IpAddresses.Apply(ipAddresses =\u003e ipAddresses[0].IpAddress),\n Port = 5432,\n Username = sqldbUser.Name,\n Password = sqldbUser.Password,\n Ssl = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlSslArgs\n {\n ClientKey = sqlClientCert.PrivateKey,\n ClientCertificate = sqlClientCert.Cert,\n CaCertificate = sqlClientCert.ServerCaCert,\n },\n CloudSqlId = \"my-database\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqldbUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpostgresqldb, err := sql.NewDatabaseInstance(ctx, \"postgresqldb\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_12\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-custom-2-13312\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqlClientCert, err := sql.NewSslCert(ctx, \"sql_client_cert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"my-cert\"),\n\t\t\tInstance: postgresqldb.Name,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpostgresqldb,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqldbUser, err := sql.NewUser(ctx, \"sqldb_user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"my-username\"),\n\t\t\tInstance: postgresqldb.Name,\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqlClientCert,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"postgresprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tHost: postgresqldb.IpAddresses.ApplyT(func(ipAddresses []sql.DatabaseInstanceIpAddress) (*string, error) {\n\t\t\t\t\treturn \u0026ipAddresses[0].IpAddress, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tPort: pulumi.Int(5432),\n\t\t\t\tUsername: sqldbUser.Name,\n\t\t\t\tPassword: sqldbUser.Password,\n\t\t\t\tSsl: \u0026databasemigrationservice.ConnectionProfilePostgresqlSslArgs{\n\t\t\t\t\tClientKey: sqlClientCert.PrivateKey,\n\t\t\t\t\tClientCertificate: sqlClientCert.Cert,\n\t\t\t\t\tCaCertificate: sqlClientCert.ServerCaCert,\n\t\t\t\t},\n\t\t\t\tCloudSqlId: pulumi.String(\"my-database\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqldbUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlSslArgs;\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 postgresqldb = new DatabaseInstance(\"postgresqldb\", DatabaseInstanceArgs.builder()\n .name(\"my-database\")\n .databaseVersion(\"POSTGRES_12\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-custom-2-13312\")\n .build())\n .deletionProtection(false)\n .build());\n\n var sqlClientCert = new SslCert(\"sqlClientCert\", SslCertArgs.builder()\n .commonName(\"my-cert\")\n .instance(postgresqldb.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(postgresqldb)\n .build());\n\n var sqldbUser = new User(\"sqldbUser\", UserArgs.builder()\n .name(\"my-username\")\n .instance(postgresqldb.name())\n .password(\"my-password\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqlClientCert)\n .build());\n\n var postgresprofile = new ConnectionProfile(\"postgresprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .host(postgresqldb.ipAddresses().applyValue(ipAddresses -\u003e ipAddresses[0].ipAddress()))\n .port(5432)\n .username(sqldbUser.name())\n .password(sqldbUser.password())\n .ssl(ConnectionProfilePostgresqlSslArgs.builder()\n .clientKey(sqlClientCert.privateKey())\n .clientCertificate(sqlClientCert.cert())\n .caCertificate(sqlClientCert.serverCaCert())\n .build())\n .cloudSqlId(\"my-database\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqldbUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n postgresqldb:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database\n databaseVersion: POSTGRES_12\n settings:\n tier: db-custom-2-13312\n deletionProtection: false\n sqlClientCert:\n type: gcp:sql:SslCert\n name: sql_client_cert\n properties:\n commonName: my-cert\n instance: ${postgresqldb.name}\n options:\n dependsOn:\n - ${postgresqldb}\n sqldbUser:\n type: gcp:sql:User\n name: sqldb_user\n properties:\n name: my-username\n instance: ${postgresqldb.name}\n password: my-password\n options:\n dependsOn:\n - ${sqlClientCert}\n postgresprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n postgresql:\n host: ${postgresqldb.ipAddresses[0].ipAddress}\n port: 5432\n username: ${sqldbUser.name}\n password: ${sqldbUser.password}\n ssl:\n clientKey: ${sqlClientCert.privateKey}\n clientCertificate: ${sqlClientCert.cert}\n caCertificate: ${sqlClientCert.serverCaCert}\n cloudSqlId: my-database\n options:\n dependsOn:\n - ${sqldbUser}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Oracle\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst oracleprofile = new gcp.databasemigrationservice.ConnectionProfile(\"oracleprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n oracle: {\n host: \"host\",\n port: 1521,\n username: \"username\",\n password: \"password\",\n databaseService: \"dbprovider\",\n staticServiceIpConnectivity: {},\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\noracleprofile = gcp.databasemigrationservice.ConnectionProfile(\"oracleprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n oracle={\n \"host\": \"host\",\n \"port\": 1521,\n \"username\": \"username\",\n \"password\": \"password\",\n \"database_service\": \"dbprovider\",\n \"static_service_ip_connectivity\": {},\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oracleprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"oracleprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Oracle = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileOracleArgs\n {\n Host = \"host\",\n Port = 1521,\n Username = \"username\",\n Password = \"password\",\n DatabaseService = \"dbprovider\",\n StaticServiceIpConnectivity = null,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := databasemigrationservice.NewConnectionProfile(ctx, \"oracleprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tOracle: \u0026databasemigrationservice.ConnectionProfileOracleArgs{\n\t\t\t\tHost: pulumi.String(\"host\"),\n\t\t\t\tPort: pulumi.Int(1521),\n\t\t\t\tUsername: pulumi.String(\"username\"),\n\t\t\t\tPassword: pulumi.String(\"password\"),\n\t\t\t\tDatabaseService: pulumi.String(\"dbprovider\"),\n\t\t\t\tStaticServiceIpConnectivity: \u0026databasemigrationservice.ConnectionProfileOracleStaticServiceIpConnectivityArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileOracleArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileOracleStaticServiceIpConnectivityArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var oracleprofile = new ConnectionProfile(\"oracleprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .oracle(ConnectionProfileOracleArgs.builder()\n .host(\"host\")\n .port(1521)\n .username(\"username\")\n .password(\"password\")\n .databaseService(\"dbprovider\")\n .staticServiceIpConnectivity()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n oracleprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n oracle:\n host: host\n port: 1521\n username: username\n password: password\n databaseService: dbprovider\n staticServiceIpConnectivity: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Alloydb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst _default = new gcp.compute.Network(\"default\", {name: \"vpc-network\"});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"private-ip-alloc\",\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 16,\n network: _default.id,\n});\nconst vpcConnection = new gcp.servicenetworking.Connection(\"vpc_connection\", {\n network: _default.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst alloydbprofile = new gcp.databasemigrationservice.ConnectionProfile(\"alloydbprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n alloydb: {\n clusterId: \"tf-test-dbmsalloycluster_52865\",\n settings: {\n initialUser: {\n user: \"alloyuser_85840\",\n password: \"alloypass_60302\",\n },\n vpcNetwork: _default.id,\n labels: {\n alloyfoo: \"alloybar\",\n },\n primaryInstanceSettings: {\n id: \"priminstid\",\n machineConfig: {\n cpuCount: 2,\n },\n databaseFlags: {},\n labels: {\n alloysinstfoo: \"allowinstbar\",\n },\n },\n },\n },\n}, {\n dependsOn: [vpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndefault = gcp.compute.Network(\"default\", name=\"vpc-network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"private-ip-alloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=16,\n network=default.id)\nvpc_connection = gcp.servicenetworking.Connection(\"vpc_connection\",\n network=default.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\nalloydbprofile = gcp.databasemigrationservice.ConnectionProfile(\"alloydbprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n alloydb={\n \"cluster_id\": \"tf-test-dbmsalloycluster_52865\",\n \"settings\": {\n \"initial_user\": {\n \"user\": \"alloyuser_85840\",\n \"password\": \"alloypass_60302\",\n },\n \"vpc_network\": default.id,\n \"labels\": {\n \"alloyfoo\": \"alloybar\",\n },\n \"primary_instance_settings\": {\n \"id\": \"priminstid\",\n \"machine_config\": {\n \"cpu_count\": 2,\n },\n \"database_flags\": {},\n \"labels\": {\n \"alloysinstfoo\": \"allowinstbar\",\n },\n },\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"vpc-network\",\n });\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"private-ip-alloc\",\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 16,\n Network = @default.Id,\n });\n\n var vpcConnection = new Gcp.ServiceNetworking.Connection(\"vpc_connection\", new()\n {\n Network = @default.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var alloydbprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"alloydbprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Alloydb = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbArgs\n {\n ClusterId = \"tf-test-dbmsalloycluster_52865\",\n Settings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsArgs\n {\n InitialUser = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsInitialUserArgs\n {\n User = \"alloyuser_85840\",\n Password = \"alloypass_60302\",\n },\n VpcNetwork = @default.Id,\n Labels = \n {\n { \"alloyfoo\", \"alloybar\" },\n },\n PrimaryInstanceSettings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs\n {\n Id = \"priminstid\",\n MachineConfig = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs\n {\n CpuCount = 2,\n },\n DatabaseFlags = null,\n Labels = \n {\n { \"alloysinstfoo\", \"allowinstbar\" },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"vpc-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-alloc\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpcConnection, err := servicenetworking.NewConnection(ctx, \"vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: _default.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"alloydbprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tAlloydb: \u0026databasemigrationservice.ConnectionProfileAlloydbArgs{\n\t\t\t\tClusterId: pulumi.String(\"tf-test-dbmsalloycluster_52865\"),\n\t\t\t\tSettings: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsArgs{\n\t\t\t\t\tInitialUser: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsInitialUserArgs{\n\t\t\t\t\t\tUser: pulumi.String(\"alloyuser_85840\"),\n\t\t\t\t\t\tPassword: pulumi.String(\"alloypass_60302\"),\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: _default.ID(),\n\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"alloyfoo\": pulumi.String(\"alloybar\"),\n\t\t\t\t\t},\n\t\t\t\t\tPrimaryInstanceSettings: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs{\n\t\t\t\t\t\tId: pulumi.String(\"priminstid\"),\n\t\t\t\t\t\tMachineConfig: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs{\n\t\t\t\t\t\t\tCpuCount: pulumi.Int(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDatabaseFlags: pulumi.StringMap{},\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"alloysinstfoo\": pulumi.String(\"allowinstbar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsInitialUserArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"vpc-network\")\n .build());\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"private-ip-alloc\")\n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(16)\n .network(default_.id())\n .build());\n\n var vpcConnection = new Connection(\"vpcConnection\", ConnectionArgs.builder()\n .network(default_.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var alloydbprofile = new ConnectionProfile(\"alloydbprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .alloydb(ConnectionProfileAlloydbArgs.builder()\n .clusterId(\"tf-test-dbmsalloycluster_52865\")\n .settings(ConnectionProfileAlloydbSettingsArgs.builder()\n .initialUser(ConnectionProfileAlloydbSettingsInitialUserArgs.builder()\n .user(\"alloyuser_85840\")\n .password(\"alloypass_60302\")\n .build())\n .vpcNetwork(default_.id())\n .labels(Map.of(\"alloyfoo\", \"alloybar\"))\n .primaryInstanceSettings(ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs.builder()\n .id(\"priminstid\")\n .machineConfig(ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs.builder()\n .cpuCount(2)\n .build())\n .databaseFlags()\n .labels(Map.of(\"alloysinstfoo\", \"allowinstbar\"))\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: vpc-network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: private-ip-alloc\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 16\n network: ${default.id}\n vpcConnection:\n type: gcp:servicenetworking:Connection\n name: vpc_connection\n properties:\n network: ${default.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n alloydbprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n alloydb:\n clusterId: tf-test-dbmsalloycluster_52865\n settings:\n initialUser:\n user: alloyuser_85840\n password: alloypass_60302\n vpcNetwork: ${default.id}\n labels:\n alloyfoo: alloybar\n primaryInstanceSettings:\n id: priminstid\n machineConfig:\n cpuCount: 2\n databaseFlags: {}\n labels:\n alloysinstfoo: allowinstbar\n options:\n dependsOn:\n - ${vpcConnection}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Mysql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst destinationCsql = new gcp.sql.DatabaseInstance(\"destination_csql\", {\n name: \"destination-csql\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-n1-standard-1\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst existing_mysql = new gcp.databasemigrationservice.ConnectionProfile(\"existing-mysql\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n mysql: {\n cloudSqlId: \"destination-csql\",\n },\n}, {\n dependsOn: [destinationCsql],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndestination_csql = gcp.sql.DatabaseInstance(\"destination_csql\",\n name=\"destination-csql\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-n1-standard-1\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nexisting_mysql = gcp.databasemigrationservice.ConnectionProfile(\"existing-mysql\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n mysql={\n \"cloud_sql_id\": \"destination-csql\",\n },\n opts = pulumi.ResourceOptions(depends_on=[destination_csql]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var destinationCsql = new Gcp.Sql.DatabaseInstance(\"destination_csql\", new()\n {\n Name = \"destination-csql\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-n1-standard-1\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var existing_mysql = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-mysql\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Mysql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlArgs\n {\n CloudSqlId = \"destination-csql\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationCsql,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationCsql, err := sql.NewDatabaseInstance(ctx, \"destination_csql\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"destination-csql\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-mysql\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMysql: \u0026databasemigrationservice.ConnectionProfileMysqlArgs{\n\t\t\t\tCloudSqlId: pulumi.String(\"destination-csql\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationCsql,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var destinationCsql = new DatabaseInstance(\"destinationCsql\", DatabaseInstanceArgs.builder()\n .name(\"destination-csql\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-n1-standard-1\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var existing_mysql = new ConnectionProfile(\"existing-mysql\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .mysql(ConnectionProfileMysqlArgs.builder()\n .cloudSqlId(\"destination-csql\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(destinationCsql)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationCsql:\n type: gcp:sql:DatabaseInstance\n name: destination_csql\n properties:\n name: destination-csql\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-n1-standard-1\n deletionProtectionEnabled: false\n deletionProtection: false\n existing-mysql:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n mysql:\n cloudSqlId: destination-csql\n options:\n dependsOn:\n - ${destinationCsql}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Postgres\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst destinationCsql = new gcp.sql.DatabaseInstance(\"destination_csql\", {\n name: \"destination-csql\",\n databaseVersion: \"POSTGRES_15\",\n settings: {\n tier: \"db-custom-2-13312\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst existing_psql = new gcp.databasemigrationservice.ConnectionProfile(\"existing-psql\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n cloudSqlId: \"destination-csql\",\n },\n}, {\n dependsOn: [destinationCsql],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndestination_csql = gcp.sql.DatabaseInstance(\"destination_csql\",\n name=\"destination-csql\",\n database_version=\"POSTGRES_15\",\n settings={\n \"tier\": \"db-custom-2-13312\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nexisting_psql = gcp.databasemigrationservice.ConnectionProfile(\"existing-psql\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"cloud_sql_id\": \"destination-csql\",\n },\n opts = pulumi.ResourceOptions(depends_on=[destination_csql]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var destinationCsql = new Gcp.Sql.DatabaseInstance(\"destination_csql\", new()\n {\n Name = \"destination-csql\",\n DatabaseVersion = \"POSTGRES_15\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-custom-2-13312\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var existing_psql = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-psql\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n CloudSqlId = \"destination-csql\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationCsql,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationCsql, err := sql.NewDatabaseInstance(ctx, \"destination_csql\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"destination-csql\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-custom-2-13312\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-psql\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tCloudSqlId: pulumi.String(\"destination-csql\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationCsql,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var destinationCsql = new DatabaseInstance(\"destinationCsql\", DatabaseInstanceArgs.builder()\n .name(\"destination-csql\")\n .databaseVersion(\"POSTGRES_15\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-custom-2-13312\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var existing_psql = new ConnectionProfile(\"existing-psql\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .cloudSqlId(\"destination-csql\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(destinationCsql)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationCsql:\n type: gcp:sql:DatabaseInstance\n name: destination_csql\n properties:\n name: destination-csql\n databaseVersion: POSTGRES_15\n settings:\n tier: db-custom-2-13312\n deletionProtectionEnabled: false\n deletionProtection: false\n existing-psql:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n postgresql:\n cloudSqlId: destination-csql\n options:\n dependsOn:\n - ${destinationCsql}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Alloydb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst _default = new gcp.compute.Network(\"default\", {name: \"destination-alloydb\"});\nconst destinationAlloydb = new gcp.alloydb.Cluster(\"destination_alloydb\", {\n clusterId: \"destination-alloydb\",\n location: \"us-central1\",\n networkConfig: {\n network: _default.id,\n },\n databaseVersion: \"POSTGRES_15\",\n initialUser: {\n user: \"destination-alloydb\",\n password: \"destination-alloydb\",\n },\n});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"destination-alloydb\",\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 16,\n network: _default.id,\n});\nconst vpcConnection = new gcp.servicenetworking.Connection(\"vpc_connection\", {\n network: _default.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst destinationAlloydbPrimary = new gcp.alloydb.Instance(\"destination_alloydb_primary\", {\n cluster: destinationAlloydb.name,\n instanceId: \"destination-alloydb-primary\",\n instanceType: \"PRIMARY\",\n}, {\n dependsOn: [vpcConnection],\n});\nconst existing_alloydb = new gcp.databasemigrationservice.ConnectionProfile(\"existing-alloydb\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n alloydbClusterId: \"destination-alloydb\",\n },\n}, {\n dependsOn: [\n destinationAlloydb,\n destinationAlloydbPrimary,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndefault = gcp.compute.Network(\"default\", name=\"destination-alloydb\")\ndestination_alloydb = gcp.alloydb.Cluster(\"destination_alloydb\",\n cluster_id=\"destination-alloydb\",\n location=\"us-central1\",\n network_config={\n \"network\": default.id,\n },\n database_version=\"POSTGRES_15\",\n initial_user={\n \"user\": \"destination-alloydb\",\n \"password\": \"destination-alloydb\",\n })\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"destination-alloydb\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=16,\n network=default.id)\nvpc_connection = gcp.servicenetworking.Connection(\"vpc_connection\",\n network=default.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\ndestination_alloydb_primary = gcp.alloydb.Instance(\"destination_alloydb_primary\",\n cluster=destination_alloydb.name,\n instance_id=\"destination-alloydb-primary\",\n instance_type=\"PRIMARY\",\n opts = pulumi.ResourceOptions(depends_on=[vpc_connection]))\nexisting_alloydb = gcp.databasemigrationservice.ConnectionProfile(\"existing-alloydb\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"alloydb_cluster_id\": \"destination-alloydb\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n destination_alloydb,\n destination_alloydb_primary,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"destination-alloydb\",\n });\n\n var destinationAlloydb = new Gcp.Alloydb.Cluster(\"destination_alloydb\", new()\n {\n ClusterId = \"destination-alloydb\",\n Location = \"us-central1\",\n NetworkConfig = new Gcp.Alloydb.Inputs.ClusterNetworkConfigArgs\n {\n Network = @default.Id,\n },\n DatabaseVersion = \"POSTGRES_15\",\n InitialUser = new Gcp.Alloydb.Inputs.ClusterInitialUserArgs\n {\n User = \"destination-alloydb\",\n Password = \"destination-alloydb\",\n },\n });\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"destination-alloydb\",\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 16,\n Network = @default.Id,\n });\n\n var vpcConnection = new Gcp.ServiceNetworking.Connection(\"vpc_connection\", new()\n {\n Network = @default.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var destinationAlloydbPrimary = new Gcp.Alloydb.Instance(\"destination_alloydb_primary\", new()\n {\n Cluster = destinationAlloydb.Name,\n InstanceId = \"destination-alloydb-primary\",\n InstanceType = \"PRIMARY\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vpcConnection,\n },\n });\n\n var existing_alloydb = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-alloydb\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n AlloydbClusterId = \"destination-alloydb\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationAlloydb,\n destinationAlloydbPrimary,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/alloydb\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"destination-alloydb\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationAlloydb, err := alloydb.NewCluster(ctx, \"destination_alloydb\", \u0026alloydb.ClusterArgs{\n\t\t\tClusterId: pulumi.String(\"destination-alloydb\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tNetworkConfig: \u0026alloydb.ClusterNetworkConfigArgs{\n\t\t\t\tNetwork: _default.ID(),\n\t\t\t},\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tInitialUser: \u0026alloydb.ClusterInitialUserArgs{\n\t\t\t\tUser: pulumi.String(\"destination-alloydb\"),\n\t\t\t\tPassword: pulumi.String(\"destination-alloydb\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"destination-alloydb\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpcConnection, err := servicenetworking.NewConnection(ctx, \"vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: _default.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationAlloydbPrimary, err := alloydb.NewInstance(ctx, \"destination_alloydb_primary\", \u0026alloydb.InstanceArgs{\n\t\t\tCluster: destinationAlloydb.Name,\n\t\t\tInstanceId: pulumi.String(\"destination-alloydb-primary\"),\n\t\t\tInstanceType: pulumi.String(\"PRIMARY\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-alloydb\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tAlloydbClusterId: pulumi.String(\"destination-alloydb\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationAlloydb,\n\t\t\tdestinationAlloydbPrimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.alloydb.Cluster;\nimport com.pulumi.gcp.alloydb.ClusterArgs;\nimport com.pulumi.gcp.alloydb.inputs.ClusterNetworkConfigArgs;\nimport com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.alloydb.Instance;\nimport com.pulumi.gcp.alloydb.InstanceArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"destination-alloydb\")\n .build());\n\n var destinationAlloydb = new Cluster(\"destinationAlloydb\", ClusterArgs.builder()\n .clusterId(\"destination-alloydb\")\n .location(\"us-central1\")\n .networkConfig(ClusterNetworkConfigArgs.builder()\n .network(default_.id())\n .build())\n .databaseVersion(\"POSTGRES_15\")\n .initialUser(ClusterInitialUserArgs.builder()\n .user(\"destination-alloydb\")\n .password(\"destination-alloydb\")\n .build())\n .build());\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"destination-alloydb\")\n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(16)\n .network(default_.id())\n .build());\n\n var vpcConnection = new Connection(\"vpcConnection\", ConnectionArgs.builder()\n .network(default_.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var destinationAlloydbPrimary = new Instance(\"destinationAlloydbPrimary\", InstanceArgs.builder()\n .cluster(destinationAlloydb.name())\n .instanceId(\"destination-alloydb-primary\")\n .instanceType(\"PRIMARY\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(vpcConnection)\n .build());\n\n var existing_alloydb = new ConnectionProfile(\"existing-alloydb\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .alloydbClusterId(\"destination-alloydb\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n destinationAlloydb,\n destinationAlloydbPrimary)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationAlloydb:\n type: gcp:alloydb:Cluster\n name: destination_alloydb\n properties:\n clusterId: destination-alloydb\n location: us-central1\n networkConfig:\n network: ${default.id}\n databaseVersion: POSTGRES_15\n initialUser:\n user: destination-alloydb\n password: destination-alloydb\n destinationAlloydbPrimary:\n type: gcp:alloydb:Instance\n name: destination_alloydb_primary\n properties:\n cluster: ${destinationAlloydb.name}\n instanceId: destination-alloydb-primary\n instanceType: PRIMARY\n options:\n dependsOn:\n - ${vpcConnection}\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: destination-alloydb\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 16\n network: ${default.id}\n vpcConnection:\n type: gcp:servicenetworking:Connection\n name: vpc_connection\n properties:\n network: ${default.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n default:\n type: gcp:compute:Network\n properties:\n name: destination-alloydb\n existing-alloydb:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n postgresql:\n alloydbClusterId: destination-alloydb\n options:\n dependsOn:\n - ${destinationAlloydb}\n - ${destinationAlloydbPrimary}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConnectionProfile can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/connectionProfiles/{{connection_profile_id}}`\n\n* `{{project}}/{{location}}/{{connection_profile_id}}`\n\n* `{{location}}/{{connection_profile_id}}`\n\nWhen using the `pulumi import` command, ConnectionProfile can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default projects/{{project}}/locations/{{location}}/connectionProfiles/{{connection_profile_id}}\n```\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default {{project}}/{{location}}/{{connection_profile_id}}\n```\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default {{location}}/{{connection_profile_id}}\n```\n\n", + "description": "A connection profile definition.\n\n\nTo get more information about ConnectionProfile, see:\n\n* [API documentation](https://cloud.google.com/database-migration/docs/reference/rest/v1/projects.locations.connectionProfiles/create)\n* How-to Guides\n * [Database Migration](https://cloud.google.com/database-migration/docs/)\n\n\n\n## Example Usage\n\n### Database Migration Service Connection Profile Cloudsql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cloudsqldb = new gcp.sql.DatabaseInstance(\"cloudsqldb\", {\n name: \"my-database\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-n1-standard-1\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst sqlClientCert = new gcp.sql.SslCert(\"sql_client_cert\", {\n commonName: \"my-cert\",\n instance: cloudsqldb.name,\n}, {\n dependsOn: [cloudsqldb],\n});\nconst sqldbUser = new gcp.sql.User(\"sqldb_user\", {\n name: \"my-username\",\n instance: cloudsqldb.name,\n password: \"my-password\",\n}, {\n dependsOn: [sqlClientCert],\n});\nconst cloudsqlprofile = new gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-fromprofileid\",\n displayName: \"my-fromprofileid_display\",\n labels: {\n foo: \"bar\",\n },\n mysql: {\n host: cloudsqldb.ipAddresses.apply(ipAddresses =\u003e ipAddresses[0].ipAddress),\n port: 3306,\n username: sqldbUser.name,\n password: sqldbUser.password,\n ssl: {\n clientKey: sqlClientCert.privateKey,\n clientCertificate: sqlClientCert.cert,\n caCertificate: sqlClientCert.serverCaCert,\n },\n cloudSqlId: \"my-database\",\n },\n}, {\n dependsOn: [sqldbUser],\n});\nconst cloudsqlprofileDestination = new gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile_destination\", {\n location: \"us-central1\",\n connectionProfileId: \"my-toprofileid\",\n displayName: \"my-toprofileid_displayname\",\n labels: {\n foo: \"bar\",\n },\n cloudsql: {\n settings: {\n databaseVersion: \"MYSQL_5_7\",\n userLabels: {\n cloudfoo: \"cloudbar\",\n },\n tier: \"db-n1-standard-1\",\n edition: \"ENTERPRISE\",\n storageAutoResizeLimit: \"0\",\n activationPolicy: \"ALWAYS\",\n ipConfig: {\n enableIpv4: true,\n requireSsl: true,\n },\n autoStorageIncrease: true,\n dataDiskType: \"PD_HDD\",\n dataDiskSizeGb: \"11\",\n zone: \"us-central1-b\",\n sourceId: project.then(project =\u003e `projects/${project.projectId}/locations/us-central1/connectionProfiles/my-fromprofileid`),\n rootPassword: \"testpasscloudsql\",\n },\n },\n}, {\n dependsOn: [cloudsqlprofile],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncloudsqldb = gcp.sql.DatabaseInstance(\"cloudsqldb\",\n name=\"my-database\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-n1-standard-1\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nsql_client_cert = gcp.sql.SslCert(\"sql_client_cert\",\n common_name=\"my-cert\",\n instance=cloudsqldb.name,\n opts = pulumi.ResourceOptions(depends_on=[cloudsqldb]))\nsqldb_user = gcp.sql.User(\"sqldb_user\",\n name=\"my-username\",\n instance=cloudsqldb.name,\n password=\"my-password\",\n opts = pulumi.ResourceOptions(depends_on=[sql_client_cert]))\ncloudsqlprofile = gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-fromprofileid\",\n display_name=\"my-fromprofileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n mysql={\n \"host\": cloudsqldb.ip_addresses[0].ip_address,\n \"port\": 3306,\n \"username\": sqldb_user.name,\n \"password\": sqldb_user.password,\n \"ssl\": {\n \"client_key\": sql_client_cert.private_key,\n \"client_certificate\": sql_client_cert.cert,\n \"ca_certificate\": sql_client_cert.server_ca_cert,\n },\n \"cloud_sql_id\": \"my-database\",\n },\n opts = pulumi.ResourceOptions(depends_on=[sqldb_user]))\ncloudsqlprofile_destination = gcp.databasemigrationservice.ConnectionProfile(\"cloudsqlprofile_destination\",\n location=\"us-central1\",\n connection_profile_id=\"my-toprofileid\",\n display_name=\"my-toprofileid_displayname\",\n labels={\n \"foo\": \"bar\",\n },\n cloudsql={\n \"settings\": {\n \"database_version\": \"MYSQL_5_7\",\n \"user_labels\": {\n \"cloudfoo\": \"cloudbar\",\n },\n \"tier\": \"db-n1-standard-1\",\n \"edition\": \"ENTERPRISE\",\n \"storage_auto_resize_limit\": \"0\",\n \"activation_policy\": \"ALWAYS\",\n \"ip_config\": {\n \"enable_ipv4\": True,\n \"require_ssl\": True,\n },\n \"auto_storage_increase\": True,\n \"data_disk_type\": \"PD_HDD\",\n \"data_disk_size_gb\": \"11\",\n \"zone\": \"us-central1-b\",\n \"source_id\": f\"projects/{project.project_id}/locations/us-central1/connectionProfiles/my-fromprofileid\",\n \"root_password\": \"testpasscloudsql\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[cloudsqlprofile]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cloudsqldb = new Gcp.Sql.DatabaseInstance(\"cloudsqldb\", new()\n {\n Name = \"my-database\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-n1-standard-1\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var sqlClientCert = new Gcp.Sql.SslCert(\"sql_client_cert\", new()\n {\n CommonName = \"my-cert\",\n Instance = cloudsqldb.Name,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cloudsqldb,\n },\n });\n\n var sqldbUser = new Gcp.Sql.User(\"sqldb_user\", new()\n {\n Name = \"my-username\",\n Instance = cloudsqldb.Name,\n Password = \"my-password\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqlClientCert,\n },\n });\n\n var cloudsqlprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"cloudsqlprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-fromprofileid\",\n DisplayName = \"my-fromprofileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Mysql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlArgs\n {\n Host = cloudsqldb.IpAddresses.Apply(ipAddresses =\u003e ipAddresses[0].IpAddress),\n Port = 3306,\n Username = sqldbUser.Name,\n Password = sqldbUser.Password,\n Ssl = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlSslArgs\n {\n ClientKey = sqlClientCert.PrivateKey,\n ClientCertificate = sqlClientCert.Cert,\n CaCertificate = sqlClientCert.ServerCaCert,\n },\n CloudSqlId = \"my-database\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqldbUser,\n },\n });\n\n var cloudsqlprofileDestination = new Gcp.DatabaseMigrationService.ConnectionProfile(\"cloudsqlprofile_destination\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-toprofileid\",\n DisplayName = \"my-toprofileid_displayname\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Cloudsql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlArgs\n {\n Settings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlSettingsArgs\n {\n DatabaseVersion = \"MYSQL_5_7\",\n UserLabels = \n {\n { \"cloudfoo\", \"cloudbar\" },\n },\n Tier = \"db-n1-standard-1\",\n Edition = \"ENTERPRISE\",\n StorageAutoResizeLimit = \"0\",\n ActivationPolicy = \"ALWAYS\",\n IpConfig = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileCloudsqlSettingsIpConfigArgs\n {\n EnableIpv4 = true,\n RequireSsl = true,\n },\n AutoStorageIncrease = true,\n DataDiskType = \"PD_HDD\",\n DataDiskSizeGb = \"11\",\n Zone = \"us-central1-b\",\n SourceId = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}/locations/us-central1/connectionProfiles/my-fromprofileid\",\n RootPassword = \"testpasscloudsql\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cloudsqlprofile,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudsqldb, err := sql.NewDatabaseInstance(ctx, \"cloudsqldb\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqlClientCert, err := sql.NewSslCert(ctx, \"sql_client_cert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"my-cert\"),\n\t\t\tInstance: cloudsqldb.Name,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcloudsqldb,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqldbUser, err := sql.NewUser(ctx, \"sqldb_user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"my-username\"),\n\t\t\tInstance: cloudsqldb.Name,\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqlClientCert,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudsqlprofile, err := databasemigrationservice.NewConnectionProfile(ctx, \"cloudsqlprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-fromprofileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-fromprofileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMysql: \u0026databasemigrationservice.ConnectionProfileMysqlArgs{\n\t\t\t\tHost: cloudsqldb.IpAddresses.ApplyT(func(ipAddresses []sql.DatabaseInstanceIpAddress) (*string, error) {\n\t\t\t\t\treturn \u0026ipAddresses[0].IpAddress, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tPort: pulumi.Int(3306),\n\t\t\t\tUsername: sqldbUser.Name,\n\t\t\t\tPassword: sqldbUser.Password,\n\t\t\t\tSsl: \u0026databasemigrationservice.ConnectionProfileMysqlSslArgs{\n\t\t\t\t\tClientKey: sqlClientCert.PrivateKey,\n\t\t\t\t\tClientCertificate: sqlClientCert.Cert,\n\t\t\t\t\tCaCertificate: sqlClientCert.ServerCaCert,\n\t\t\t\t},\n\t\t\t\tCloudSqlId: pulumi.String(\"my-database\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqldbUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"cloudsqlprofile_destination\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-toprofileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-toprofileid_displayname\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tCloudsql: \u0026databasemigrationservice.ConnectionProfileCloudsqlArgs{\n\t\t\t\tSettings: \u0026databasemigrationservice.ConnectionProfileCloudsqlSettingsArgs{\n\t\t\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"cloudfoo\": pulumi.String(\"cloudbar\"),\n\t\t\t\t\t},\n\t\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\t\tEdition: pulumi.String(\"ENTERPRISE\"),\n\t\t\t\t\tStorageAutoResizeLimit: pulumi.String(\"0\"),\n\t\t\t\t\tActivationPolicy: pulumi.String(\"ALWAYS\"),\n\t\t\t\t\tIpConfig: \u0026databasemigrationservice.ConnectionProfileCloudsqlSettingsIpConfigArgs{\n\t\t\t\t\t\tEnableIpv4: pulumi.Bool(true),\n\t\t\t\t\t\tRequireSsl: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tAutoStorageIncrease: pulumi.Bool(true),\n\t\t\t\t\tDataDiskType: pulumi.String(\"PD_HDD\"),\n\t\t\t\t\tDataDiskSizeGb: pulumi.String(\"11\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t\tSourceId: pulumi.Sprintf(\"projects/%v/locations/us-central1/connectionProfiles/my-fromprofileid\", project.ProjectId),\n\t\t\t\t\tRootPassword: pulumi.String(\"testpasscloudsql\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcloudsqlprofile,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlSslArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileCloudsqlSettingsIpConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cloudsqldb = new DatabaseInstance(\"cloudsqldb\", DatabaseInstanceArgs.builder()\n .name(\"my-database\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-n1-standard-1\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var sqlClientCert = new SslCert(\"sqlClientCert\", SslCertArgs.builder()\n .commonName(\"my-cert\")\n .instance(cloudsqldb.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cloudsqldb)\n .build());\n\n var sqldbUser = new User(\"sqldbUser\", UserArgs.builder()\n .name(\"my-username\")\n .instance(cloudsqldb.name())\n .password(\"my-password\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqlClientCert)\n .build());\n\n var cloudsqlprofile = new ConnectionProfile(\"cloudsqlprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-fromprofileid\")\n .displayName(\"my-fromprofileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .mysql(ConnectionProfileMysqlArgs.builder()\n .host(cloudsqldb.ipAddresses().applyValue(ipAddresses -\u003e ipAddresses[0].ipAddress()))\n .port(3306)\n .username(sqldbUser.name())\n .password(sqldbUser.password())\n .ssl(ConnectionProfileMysqlSslArgs.builder()\n .clientKey(sqlClientCert.privateKey())\n .clientCertificate(sqlClientCert.cert())\n .caCertificate(sqlClientCert.serverCaCert())\n .build())\n .cloudSqlId(\"my-database\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqldbUser)\n .build());\n\n var cloudsqlprofileDestination = new ConnectionProfile(\"cloudsqlprofileDestination\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-toprofileid\")\n .displayName(\"my-toprofileid_displayname\")\n .labels(Map.of(\"foo\", \"bar\"))\n .cloudsql(ConnectionProfileCloudsqlArgs.builder()\n .settings(ConnectionProfileCloudsqlSettingsArgs.builder()\n .databaseVersion(\"MYSQL_5_7\")\n .userLabels(Map.of(\"cloudfoo\", \"cloudbar\"))\n .tier(\"db-n1-standard-1\")\n .edition(\"ENTERPRISE\")\n .storageAutoResizeLimit(\"0\")\n .activationPolicy(\"ALWAYS\")\n .ipConfig(ConnectionProfileCloudsqlSettingsIpConfigArgs.builder()\n .enableIpv4(true)\n .requireSsl(true)\n .build())\n .autoStorageIncrease(true)\n .dataDiskType(\"PD_HDD\")\n .dataDiskSizeGb(\"11\")\n .zone(\"us-central1-b\")\n .sourceId(String.format(\"projects/%s/locations/us-central1/connectionProfiles/my-fromprofileid\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId())))\n .rootPassword(\"testpasscloudsql\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cloudsqlprofile)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudsqldb:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-n1-standard-1\n deletionProtectionEnabled: false\n deletionProtection: false\n sqlClientCert:\n type: gcp:sql:SslCert\n name: sql_client_cert\n properties:\n commonName: my-cert\n instance: ${cloudsqldb.name}\n options:\n dependsOn:\n - ${cloudsqldb}\n sqldbUser:\n type: gcp:sql:User\n name: sqldb_user\n properties:\n name: my-username\n instance: ${cloudsqldb.name}\n password: my-password\n options:\n dependsOn:\n - ${sqlClientCert}\n cloudsqlprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-fromprofileid\n displayName: my-fromprofileid_display\n labels:\n foo: bar\n mysql:\n host: ${cloudsqldb.ipAddresses[0].ipAddress}\n port: 3306\n username: ${sqldbUser.name}\n password: ${sqldbUser.password}\n ssl:\n clientKey: ${sqlClientCert.privateKey}\n clientCertificate: ${sqlClientCert.cert}\n caCertificate: ${sqlClientCert.serverCaCert}\n cloudSqlId: my-database\n options:\n dependsOn:\n - ${sqldbUser}\n cloudsqlprofileDestination:\n type: gcp:databasemigrationservice:ConnectionProfile\n name: cloudsqlprofile_destination\n properties:\n location: us-central1\n connectionProfileId: my-toprofileid\n displayName: my-toprofileid_displayname\n labels:\n foo: bar\n cloudsql:\n settings:\n databaseVersion: MYSQL_5_7\n userLabels:\n cloudfoo: cloudbar\n tier: db-n1-standard-1\n edition: ENTERPRISE\n storageAutoResizeLimit: '0'\n activationPolicy: ALWAYS\n ipConfig:\n enableIpv4: true\n requireSsl: true\n autoStorageIncrease: true\n dataDiskType: PD_HDD\n dataDiskSizeGb: '11'\n zone: us-central1-b\n sourceId: projects/${project.projectId}/locations/us-central1/connectionProfiles/my-fromprofileid\n rootPassword: testpasscloudsql\n options:\n dependsOn:\n - ${cloudsqlprofile}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Postgres\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst postgresqldb = new gcp.sql.DatabaseInstance(\"postgresqldb\", {\n name: \"my-database\",\n databaseVersion: \"POSTGRES_12\",\n settings: {\n tier: \"db-custom-2-13312\",\n },\n deletionProtection: false,\n});\nconst sqlClientCert = new gcp.sql.SslCert(\"sql_client_cert\", {\n commonName: \"my-cert\",\n instance: postgresqldb.name,\n}, {\n dependsOn: [postgresqldb],\n});\nconst sqldbUser = new gcp.sql.User(\"sqldb_user\", {\n name: \"my-username\",\n instance: postgresqldb.name,\n password: \"my-password\",\n}, {\n dependsOn: [sqlClientCert],\n});\nconst postgresprofile = new gcp.databasemigrationservice.ConnectionProfile(\"postgresprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n host: postgresqldb.ipAddresses.apply(ipAddresses =\u003e ipAddresses[0].ipAddress),\n port: 5432,\n username: sqldbUser.name,\n password: sqldbUser.password,\n ssl: {\n clientKey: sqlClientCert.privateKey,\n clientCertificate: sqlClientCert.cert,\n caCertificate: sqlClientCert.serverCaCert,\n },\n cloudSqlId: \"my-database\",\n },\n}, {\n dependsOn: [sqldbUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npostgresqldb = gcp.sql.DatabaseInstance(\"postgresqldb\",\n name=\"my-database\",\n database_version=\"POSTGRES_12\",\n settings={\n \"tier\": \"db-custom-2-13312\",\n },\n deletion_protection=False)\nsql_client_cert = gcp.sql.SslCert(\"sql_client_cert\",\n common_name=\"my-cert\",\n instance=postgresqldb.name,\n opts = pulumi.ResourceOptions(depends_on=[postgresqldb]))\nsqldb_user = gcp.sql.User(\"sqldb_user\",\n name=\"my-username\",\n instance=postgresqldb.name,\n password=\"my-password\",\n opts = pulumi.ResourceOptions(depends_on=[sql_client_cert]))\npostgresprofile = gcp.databasemigrationservice.ConnectionProfile(\"postgresprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"host\": postgresqldb.ip_addresses[0].ip_address,\n \"port\": 5432,\n \"username\": sqldb_user.name,\n \"password\": sqldb_user.password,\n \"ssl\": {\n \"client_key\": sql_client_cert.private_key,\n \"client_certificate\": sql_client_cert.cert,\n \"ca_certificate\": sql_client_cert.server_ca_cert,\n },\n \"cloud_sql_id\": \"my-database\",\n },\n opts = pulumi.ResourceOptions(depends_on=[sqldb_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var postgresqldb = new Gcp.Sql.DatabaseInstance(\"postgresqldb\", new()\n {\n Name = \"my-database\",\n DatabaseVersion = \"POSTGRES_12\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-custom-2-13312\",\n },\n DeletionProtection = false,\n });\n\n var sqlClientCert = new Gcp.Sql.SslCert(\"sql_client_cert\", new()\n {\n CommonName = \"my-cert\",\n Instance = postgresqldb.Name,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n postgresqldb,\n },\n });\n\n var sqldbUser = new Gcp.Sql.User(\"sqldb_user\", new()\n {\n Name = \"my-username\",\n Instance = postgresqldb.Name,\n Password = \"my-password\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqlClientCert,\n },\n });\n\n var postgresprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"postgresprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n Host = postgresqldb.IpAddresses.Apply(ipAddresses =\u003e ipAddresses[0].IpAddress),\n Port = 5432,\n Username = sqldbUser.Name,\n Password = sqldbUser.Password,\n Ssl = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlSslArgs\n {\n ClientKey = sqlClientCert.PrivateKey,\n ClientCertificate = sqlClientCert.Cert,\n CaCertificate = sqlClientCert.ServerCaCert,\n },\n CloudSqlId = \"my-database\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sqldbUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpostgresqldb, err := sql.NewDatabaseInstance(ctx, \"postgresqldb\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"my-database\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_12\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-custom-2-13312\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqlClientCert, err := sql.NewSslCert(ctx, \"sql_client_cert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"my-cert\"),\n\t\t\tInstance: postgresqldb.Name,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpostgresqldb,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsqldbUser, err := sql.NewUser(ctx, \"sqldb_user\", \u0026sql.UserArgs{\n\t\t\tName: pulumi.String(\"my-username\"),\n\t\t\tInstance: postgresqldb.Name,\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqlClientCert,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"postgresprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tHost: postgresqldb.IpAddresses.ApplyT(func(ipAddresses []sql.DatabaseInstanceIpAddress) (*string, error) {\n\t\t\t\t\treturn \u0026ipAddresses[0].IpAddress, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tPort: pulumi.Int(5432),\n\t\t\t\tUsername: sqldbUser.Name,\n\t\t\t\tPassword: sqldbUser.Password,\n\t\t\t\tSsl: \u0026databasemigrationservice.ConnectionProfilePostgresqlSslArgs{\n\t\t\t\t\tClientKey: sqlClientCert.PrivateKey,\n\t\t\t\t\tClientCertificate: sqlClientCert.Cert,\n\t\t\t\t\tCaCertificate: sqlClientCert.ServerCaCert,\n\t\t\t\t},\n\t\t\t\tCloudSqlId: pulumi.String(\"my-database\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsqldbUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport com.pulumi.gcp.sql.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlSslArgs;\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 postgresqldb = new DatabaseInstance(\"postgresqldb\", DatabaseInstanceArgs.builder()\n .name(\"my-database\")\n .databaseVersion(\"POSTGRES_12\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-custom-2-13312\")\n .build())\n .deletionProtection(false)\n .build());\n\n var sqlClientCert = new SslCert(\"sqlClientCert\", SslCertArgs.builder()\n .commonName(\"my-cert\")\n .instance(postgresqldb.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(postgresqldb)\n .build());\n\n var sqldbUser = new User(\"sqldbUser\", UserArgs.builder()\n .name(\"my-username\")\n .instance(postgresqldb.name())\n .password(\"my-password\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqlClientCert)\n .build());\n\n var postgresprofile = new ConnectionProfile(\"postgresprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .host(postgresqldb.ipAddresses().applyValue(ipAddresses -\u003e ipAddresses[0].ipAddress()))\n .port(5432)\n .username(sqldbUser.name())\n .password(sqldbUser.password())\n .ssl(ConnectionProfilePostgresqlSslArgs.builder()\n .clientKey(sqlClientCert.privateKey())\n .clientCertificate(sqlClientCert.cert())\n .caCertificate(sqlClientCert.serverCaCert())\n .build())\n .cloudSqlId(\"my-database\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(sqldbUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n postgresqldb:\n type: gcp:sql:DatabaseInstance\n properties:\n name: my-database\n databaseVersion: POSTGRES_12\n settings:\n tier: db-custom-2-13312\n deletionProtection: false\n sqlClientCert:\n type: gcp:sql:SslCert\n name: sql_client_cert\n properties:\n commonName: my-cert\n instance: ${postgresqldb.name}\n options:\n dependsOn:\n - ${postgresqldb}\n sqldbUser:\n type: gcp:sql:User\n name: sqldb_user\n properties:\n name: my-username\n instance: ${postgresqldb.name}\n password: my-password\n options:\n dependsOn:\n - ${sqlClientCert}\n postgresprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n postgresql:\n host: ${postgresqldb.ipAddresses[0].ipAddress}\n port: 5432\n username: ${sqldbUser.name}\n password: ${sqldbUser.password}\n ssl:\n clientKey: ${sqlClientCert.privateKey}\n clientCertificate: ${sqlClientCert.cert}\n caCertificate: ${sqlClientCert.serverCaCert}\n cloudSqlId: my-database\n options:\n dependsOn:\n - ${sqldbUser}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Oracle\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst oracleprofile = new gcp.databasemigrationservice.ConnectionProfile(\"oracleprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n oracle: {\n host: \"host\",\n port: 1521,\n username: \"username\",\n password: \"password\",\n databaseService: \"dbprovider\",\n staticServiceIpConnectivity: {},\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\noracleprofile = gcp.databasemigrationservice.ConnectionProfile(\"oracleprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n oracle={\n \"host\": \"host\",\n \"port\": 1521,\n \"username\": \"username\",\n \"password\": \"password\",\n \"database_service\": \"dbprovider\",\n \"static_service_ip_connectivity\": {},\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oracleprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"oracleprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Oracle = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileOracleArgs\n {\n Host = \"host\",\n Port = 1521,\n Username = \"username\",\n Password = \"password\",\n DatabaseService = \"dbprovider\",\n StaticServiceIpConnectivity = null,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := databasemigrationservice.NewConnectionProfile(ctx, \"oracleprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tOracle: \u0026databasemigrationservice.ConnectionProfileOracleArgs{\n\t\t\t\tHost: pulumi.String(\"host\"),\n\t\t\t\tPort: pulumi.Int(1521),\n\t\t\t\tUsername: pulumi.String(\"username\"),\n\t\t\t\tPassword: pulumi.String(\"password\"),\n\t\t\t\tDatabaseService: pulumi.String(\"dbprovider\"),\n\t\t\t\tStaticServiceIpConnectivity: \u0026databasemigrationservice.ConnectionProfileOracleStaticServiceIpConnectivityArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileOracleArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileOracleStaticServiceIpConnectivityArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var oracleprofile = new ConnectionProfile(\"oracleprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .oracle(ConnectionProfileOracleArgs.builder()\n .host(\"host\")\n .port(1521)\n .username(\"username\")\n .password(\"password\")\n .databaseService(\"dbprovider\")\n .staticServiceIpConnectivity()\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n oracleprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n oracle:\n host: host\n port: 1521\n username: username\n password: password\n databaseService: dbprovider\n staticServiceIpConnectivity: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Alloydb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst _default = new gcp.compute.Network(\"default\", {name: \"vpc-network\"});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"private-ip-alloc\",\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 16,\n network: _default.id,\n});\nconst vpcConnection = new gcp.servicenetworking.Connection(\"vpc_connection\", {\n network: _default.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst alloydbprofile = new gcp.databasemigrationservice.ConnectionProfile(\"alloydbprofile\", {\n location: \"us-central1\",\n connectionProfileId: \"my-profileid\",\n displayName: \"my-profileid_display\",\n labels: {\n foo: \"bar\",\n },\n alloydb: {\n clusterId: \"tf-test-dbmsalloycluster_85840\",\n settings: {\n initialUser: {\n user: \"alloyuser_60302\",\n password: \"alloypass_22811\",\n },\n vpcNetwork: _default.id,\n labels: {\n alloyfoo: \"alloybar\",\n },\n primaryInstanceSettings: {\n id: \"priminstid\",\n machineConfig: {\n cpuCount: 2,\n },\n databaseFlags: {},\n labels: {\n alloysinstfoo: \"allowinstbar\",\n },\n },\n },\n },\n}, {\n dependsOn: [vpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndefault = gcp.compute.Network(\"default\", name=\"vpc-network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"private-ip-alloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=16,\n network=default.id)\nvpc_connection = gcp.servicenetworking.Connection(\"vpc_connection\",\n network=default.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\nalloydbprofile = gcp.databasemigrationservice.ConnectionProfile(\"alloydbprofile\",\n location=\"us-central1\",\n connection_profile_id=\"my-profileid\",\n display_name=\"my-profileid_display\",\n labels={\n \"foo\": \"bar\",\n },\n alloydb={\n \"cluster_id\": \"tf-test-dbmsalloycluster_85840\",\n \"settings\": {\n \"initial_user\": {\n \"user\": \"alloyuser_60302\",\n \"password\": \"alloypass_22811\",\n },\n \"vpc_network\": default.id,\n \"labels\": {\n \"alloyfoo\": \"alloybar\",\n },\n \"primary_instance_settings\": {\n \"id\": \"priminstid\",\n \"machine_config\": {\n \"cpu_count\": 2,\n },\n \"database_flags\": {},\n \"labels\": {\n \"alloysinstfoo\": \"allowinstbar\",\n },\n },\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"vpc-network\",\n });\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"private-ip-alloc\",\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 16,\n Network = @default.Id,\n });\n\n var vpcConnection = new Gcp.ServiceNetworking.Connection(\"vpc_connection\", new()\n {\n Network = @default.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var alloydbprofile = new Gcp.DatabaseMigrationService.ConnectionProfile(\"alloydbprofile\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"my-profileid\",\n DisplayName = \"my-profileid_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Alloydb = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbArgs\n {\n ClusterId = \"tf-test-dbmsalloycluster_85840\",\n Settings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsArgs\n {\n InitialUser = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsInitialUserArgs\n {\n User = \"alloyuser_60302\",\n Password = \"alloypass_22811\",\n },\n VpcNetwork = @default.Id,\n Labels = \n {\n { \"alloyfoo\", \"alloybar\" },\n },\n PrimaryInstanceSettings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs\n {\n Id = \"priminstid\",\n MachineConfig = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs\n {\n CpuCount = 2,\n },\n DatabaseFlags = null,\n Labels = \n {\n { \"alloysinstfoo\", \"allowinstbar\" },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"vpc-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-alloc\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpcConnection, err := servicenetworking.NewConnection(ctx, \"vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: _default.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"alloydbprofile\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"my-profileid\"),\n\t\t\tDisplayName: pulumi.String(\"my-profileid_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tAlloydb: \u0026databasemigrationservice.ConnectionProfileAlloydbArgs{\n\t\t\t\tClusterId: pulumi.String(\"tf-test-dbmsalloycluster_85840\"),\n\t\t\t\tSettings: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsArgs{\n\t\t\t\t\tInitialUser: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsInitialUserArgs{\n\t\t\t\t\t\tUser: pulumi.String(\"alloyuser_60302\"),\n\t\t\t\t\t\tPassword: pulumi.String(\"alloypass_22811\"),\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: _default.ID(),\n\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"alloyfoo\": pulumi.String(\"alloybar\"),\n\t\t\t\t\t},\n\t\t\t\t\tPrimaryInstanceSettings: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs{\n\t\t\t\t\t\tId: pulumi.String(\"priminstid\"),\n\t\t\t\t\t\tMachineConfig: \u0026databasemigrationservice.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs{\n\t\t\t\t\t\t\tCpuCount: pulumi.Int(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDatabaseFlags: pulumi.StringMap{},\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"alloysinstfoo\": pulumi.String(\"allowinstbar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsInitialUserArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"vpc-network\")\n .build());\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"private-ip-alloc\")\n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(16)\n .network(default_.id())\n .build());\n\n var vpcConnection = new Connection(\"vpcConnection\", ConnectionArgs.builder()\n .network(default_.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var alloydbprofile = new ConnectionProfile(\"alloydbprofile\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"my-profileid\")\n .displayName(\"my-profileid_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .alloydb(ConnectionProfileAlloydbArgs.builder()\n .clusterId(\"tf-test-dbmsalloycluster_85840\")\n .settings(ConnectionProfileAlloydbSettingsArgs.builder()\n .initialUser(ConnectionProfileAlloydbSettingsInitialUserArgs.builder()\n .user(\"alloyuser_60302\")\n .password(\"alloypass_22811\")\n .build())\n .vpcNetwork(default_.id())\n .labels(Map.of(\"alloyfoo\", \"alloybar\"))\n .primaryInstanceSettings(ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsArgs.builder()\n .id(\"priminstid\")\n .machineConfig(ConnectionProfileAlloydbSettingsPrimaryInstanceSettingsMachineConfigArgs.builder()\n .cpuCount(2)\n .build())\n .databaseFlags()\n .labels(Map.of(\"alloysinstfoo\", \"allowinstbar\"))\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: vpc-network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: private-ip-alloc\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 16\n network: ${default.id}\n vpcConnection:\n type: gcp:servicenetworking:Connection\n name: vpc_connection\n properties:\n network: ${default.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n alloydbprofile:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: my-profileid\n displayName: my-profileid_display\n labels:\n foo: bar\n alloydb:\n clusterId: tf-test-dbmsalloycluster_85840\n settings:\n initialUser:\n user: alloyuser_60302\n password: alloypass_22811\n vpcNetwork: ${default.id}\n labels:\n alloyfoo: alloybar\n primaryInstanceSettings:\n id: priminstid\n machineConfig:\n cpuCount: 2\n databaseFlags: {}\n labels:\n alloysinstfoo: allowinstbar\n options:\n dependsOn:\n - ${vpcConnection}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Mysql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst destinationCsql = new gcp.sql.DatabaseInstance(\"destination_csql\", {\n name: \"destination-csql\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-n1-standard-1\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst existing_mysql = new gcp.databasemigrationservice.ConnectionProfile(\"existing-mysql\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n mysql: {\n cloudSqlId: \"destination-csql\",\n },\n}, {\n dependsOn: [destinationCsql],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndestination_csql = gcp.sql.DatabaseInstance(\"destination_csql\",\n name=\"destination-csql\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-n1-standard-1\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nexisting_mysql = gcp.databasemigrationservice.ConnectionProfile(\"existing-mysql\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n mysql={\n \"cloud_sql_id\": \"destination-csql\",\n },\n opts = pulumi.ResourceOptions(depends_on=[destination_csql]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var destinationCsql = new Gcp.Sql.DatabaseInstance(\"destination_csql\", new()\n {\n Name = \"destination-csql\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-n1-standard-1\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var existing_mysql = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-mysql\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Mysql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileMysqlArgs\n {\n CloudSqlId = \"destination-csql\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationCsql,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationCsql, err := sql.NewDatabaseInstance(ctx, \"destination_csql\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"destination-csql\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-n1-standard-1\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-mysql\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMysql: \u0026databasemigrationservice.ConnectionProfileMysqlArgs{\n\t\t\t\tCloudSqlId: pulumi.String(\"destination-csql\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationCsql,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfileMysqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var destinationCsql = new DatabaseInstance(\"destinationCsql\", DatabaseInstanceArgs.builder()\n .name(\"destination-csql\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-n1-standard-1\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var existing_mysql = new ConnectionProfile(\"existing-mysql\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .mysql(ConnectionProfileMysqlArgs.builder()\n .cloudSqlId(\"destination-csql\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(destinationCsql)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationCsql:\n type: gcp:sql:DatabaseInstance\n name: destination_csql\n properties:\n name: destination-csql\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-n1-standard-1\n deletionProtectionEnabled: false\n deletionProtection: false\n existing-mysql:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n mysql:\n cloudSqlId: destination-csql\n options:\n dependsOn:\n - ${destinationCsql}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Postgres\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst destinationCsql = new gcp.sql.DatabaseInstance(\"destination_csql\", {\n name: \"destination-csql\",\n databaseVersion: \"POSTGRES_15\",\n settings: {\n tier: \"db-custom-2-13312\",\n deletionProtectionEnabled: false,\n },\n deletionProtection: false,\n});\nconst existing_psql = new gcp.databasemigrationservice.ConnectionProfile(\"existing-psql\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n cloudSqlId: \"destination-csql\",\n },\n}, {\n dependsOn: [destinationCsql],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndestination_csql = gcp.sql.DatabaseInstance(\"destination_csql\",\n name=\"destination-csql\",\n database_version=\"POSTGRES_15\",\n settings={\n \"tier\": \"db-custom-2-13312\",\n \"deletion_protection_enabled\": False,\n },\n deletion_protection=False)\nexisting_psql = gcp.databasemigrationservice.ConnectionProfile(\"existing-psql\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"cloud_sql_id\": \"destination-csql\",\n },\n opts = pulumi.ResourceOptions(depends_on=[destination_csql]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var destinationCsql = new Gcp.Sql.DatabaseInstance(\"destination_csql\", new()\n {\n Name = \"destination-csql\",\n DatabaseVersion = \"POSTGRES_15\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-custom-2-13312\",\n DeletionProtectionEnabled = false,\n },\n DeletionProtection = false,\n });\n\n var existing_psql = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-psql\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n CloudSqlId = \"destination-csql\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationCsql,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationCsql, err := sql.NewDatabaseInstance(ctx, \"destination_csql\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"destination-csql\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-custom-2-13312\"),\n\t\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-psql\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tCloudSqlId: pulumi.String(\"destination-csql\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationCsql,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var destinationCsql = new DatabaseInstance(\"destinationCsql\", DatabaseInstanceArgs.builder()\n .name(\"destination-csql\")\n .databaseVersion(\"POSTGRES_15\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-custom-2-13312\")\n .deletionProtectionEnabled(false)\n .build())\n .deletionProtection(false)\n .build());\n\n var existing_psql = new ConnectionProfile(\"existing-psql\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .cloudSqlId(\"destination-csql\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(destinationCsql)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationCsql:\n type: gcp:sql:DatabaseInstance\n name: destination_csql\n properties:\n name: destination-csql\n databaseVersion: POSTGRES_15\n settings:\n tier: db-custom-2-13312\n deletionProtectionEnabled: false\n deletionProtection: false\n existing-psql:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n postgresql:\n cloudSqlId: destination-csql\n options:\n dependsOn:\n - ${destinationCsql}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Database Migration Service Connection Profile Existing Alloydb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst _default = new gcp.compute.Network(\"default\", {name: \"destination-alloydb\"});\nconst destinationAlloydb = new gcp.alloydb.Cluster(\"destination_alloydb\", {\n clusterId: \"destination-alloydb\",\n location: \"us-central1\",\n networkConfig: {\n network: _default.id,\n },\n databaseVersion: \"POSTGRES_15\",\n initialUser: {\n user: \"destination-alloydb\",\n password: \"destination-alloydb\",\n },\n});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"destination-alloydb\",\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 16,\n network: _default.id,\n});\nconst vpcConnection = new gcp.servicenetworking.Connection(\"vpc_connection\", {\n network: _default.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst destinationAlloydbPrimary = new gcp.alloydb.Instance(\"destination_alloydb_primary\", {\n cluster: destinationAlloydb.name,\n instanceId: \"destination-alloydb-primary\",\n instanceType: \"PRIMARY\",\n}, {\n dependsOn: [vpcConnection],\n});\nconst existing_alloydb = new gcp.databasemigrationservice.ConnectionProfile(\"existing-alloydb\", {\n location: \"us-central1\",\n connectionProfileId: \"destination-cp\",\n displayName: \"destination-cp_display\",\n labels: {\n foo: \"bar\",\n },\n postgresql: {\n alloydbClusterId: \"destination-alloydb\",\n },\n}, {\n dependsOn: [\n destinationAlloydb,\n destinationAlloydbPrimary,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ndefault = gcp.compute.Network(\"default\", name=\"destination-alloydb\")\ndestination_alloydb = gcp.alloydb.Cluster(\"destination_alloydb\",\n cluster_id=\"destination-alloydb\",\n location=\"us-central1\",\n network_config={\n \"network\": default.id,\n },\n database_version=\"POSTGRES_15\",\n initial_user={\n \"user\": \"destination-alloydb\",\n \"password\": \"destination-alloydb\",\n })\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"destination-alloydb\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=16,\n network=default.id)\nvpc_connection = gcp.servicenetworking.Connection(\"vpc_connection\",\n network=default.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\ndestination_alloydb_primary = gcp.alloydb.Instance(\"destination_alloydb_primary\",\n cluster=destination_alloydb.name,\n instance_id=\"destination-alloydb-primary\",\n instance_type=\"PRIMARY\",\n opts = pulumi.ResourceOptions(depends_on=[vpc_connection]))\nexisting_alloydb = gcp.databasemigrationservice.ConnectionProfile(\"existing-alloydb\",\n location=\"us-central1\",\n connection_profile_id=\"destination-cp\",\n display_name=\"destination-cp_display\",\n labels={\n \"foo\": \"bar\",\n },\n postgresql={\n \"alloydb_cluster_id\": \"destination-alloydb\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n destination_alloydb,\n destination_alloydb_primary,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"destination-alloydb\",\n });\n\n var destinationAlloydb = new Gcp.Alloydb.Cluster(\"destination_alloydb\", new()\n {\n ClusterId = \"destination-alloydb\",\n Location = \"us-central1\",\n NetworkConfig = new Gcp.Alloydb.Inputs.ClusterNetworkConfigArgs\n {\n Network = @default.Id,\n },\n DatabaseVersion = \"POSTGRES_15\",\n InitialUser = new Gcp.Alloydb.Inputs.ClusterInitialUserArgs\n {\n User = \"destination-alloydb\",\n Password = \"destination-alloydb\",\n },\n });\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"destination-alloydb\",\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 16,\n Network = @default.Id,\n });\n\n var vpcConnection = new Gcp.ServiceNetworking.Connection(\"vpc_connection\", new()\n {\n Network = @default.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var destinationAlloydbPrimary = new Gcp.Alloydb.Instance(\"destination_alloydb_primary\", new()\n {\n Cluster = destinationAlloydb.Name,\n InstanceId = \"destination-alloydb-primary\",\n InstanceType = \"PRIMARY\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vpcConnection,\n },\n });\n\n var existing_alloydb = new Gcp.DatabaseMigrationService.ConnectionProfile(\"existing-alloydb\", new()\n {\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-cp\",\n DisplayName = \"destination-cp_display\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Postgresql = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfilePostgresqlArgs\n {\n AlloydbClusterId = \"destination-alloydb\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n destinationAlloydb,\n destinationAlloydbPrimary,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/alloydb\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/databasemigrationservice\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"destination-alloydb\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationAlloydb, err := alloydb.NewCluster(ctx, \"destination_alloydb\", \u0026alloydb.ClusterArgs{\n\t\t\tClusterId: pulumi.String(\"destination-alloydb\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tNetworkConfig: \u0026alloydb.ClusterNetworkConfigArgs{\n\t\t\t\tNetwork: _default.ID(),\n\t\t\t},\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tInitialUser: \u0026alloydb.ClusterInitialUserArgs{\n\t\t\t\tUser: pulumi.String(\"destination-alloydb\"),\n\t\t\t\tPassword: pulumi.String(\"destination-alloydb\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"destination-alloydb\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpcConnection, err := servicenetworking.NewConnection(ctx, \"vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: _default.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationAlloydbPrimary, err := alloydb.NewInstance(ctx, \"destination_alloydb_primary\", \u0026alloydb.InstanceArgs{\n\t\t\tCluster: destinationAlloydb.Name,\n\t\t\tInstanceId: pulumi.String(\"destination-alloydb-primary\"),\n\t\t\tInstanceType: pulumi.String(\"PRIMARY\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = databasemigrationservice.NewConnectionProfile(ctx, \"existing-alloydb\", \u0026databasemigrationservice.ConnectionProfileArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-cp\"),\n\t\t\tDisplayName: pulumi.String(\"destination-cp_display\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPostgresql: \u0026databasemigrationservice.ConnectionProfilePostgresqlArgs{\n\t\t\t\tAlloydbClusterId: pulumi.String(\"destination-alloydb\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdestinationAlloydb,\n\t\t\tdestinationAlloydbPrimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.alloydb.Cluster;\nimport com.pulumi.gcp.alloydb.ClusterArgs;\nimport com.pulumi.gcp.alloydb.inputs.ClusterNetworkConfigArgs;\nimport com.pulumi.gcp.alloydb.inputs.ClusterInitialUserArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.alloydb.Instance;\nimport com.pulumi.gcp.alloydb.InstanceArgs;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfile;\nimport com.pulumi.gcp.databasemigrationservice.ConnectionProfileArgs;\nimport com.pulumi.gcp.databasemigrationservice.inputs.ConnectionProfilePostgresqlArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"destination-alloydb\")\n .build());\n\n var destinationAlloydb = new Cluster(\"destinationAlloydb\", ClusterArgs.builder()\n .clusterId(\"destination-alloydb\")\n .location(\"us-central1\")\n .networkConfig(ClusterNetworkConfigArgs.builder()\n .network(default_.id())\n .build())\n .databaseVersion(\"POSTGRES_15\")\n .initialUser(ClusterInitialUserArgs.builder()\n .user(\"destination-alloydb\")\n .password(\"destination-alloydb\")\n .build())\n .build());\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"destination-alloydb\")\n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(16)\n .network(default_.id())\n .build());\n\n var vpcConnection = new Connection(\"vpcConnection\", ConnectionArgs.builder()\n .network(default_.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var destinationAlloydbPrimary = new Instance(\"destinationAlloydbPrimary\", InstanceArgs.builder()\n .cluster(destinationAlloydb.name())\n .instanceId(\"destination-alloydb-primary\")\n .instanceType(\"PRIMARY\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(vpcConnection)\n .build());\n\n var existing_alloydb = new ConnectionProfile(\"existing-alloydb\", ConnectionProfileArgs.builder()\n .location(\"us-central1\")\n .connectionProfileId(\"destination-cp\")\n .displayName(\"destination-cp_display\")\n .labels(Map.of(\"foo\", \"bar\"))\n .postgresql(ConnectionProfilePostgresqlArgs.builder()\n .alloydbClusterId(\"destination-alloydb\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n destinationAlloydb,\n destinationAlloydbPrimary)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destinationAlloydb:\n type: gcp:alloydb:Cluster\n name: destination_alloydb\n properties:\n clusterId: destination-alloydb\n location: us-central1\n networkConfig:\n network: ${default.id}\n databaseVersion: POSTGRES_15\n initialUser:\n user: destination-alloydb\n password: destination-alloydb\n destinationAlloydbPrimary:\n type: gcp:alloydb:Instance\n name: destination_alloydb_primary\n properties:\n cluster: ${destinationAlloydb.name}\n instanceId: destination-alloydb-primary\n instanceType: PRIMARY\n options:\n dependsOn:\n - ${vpcConnection}\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: destination-alloydb\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 16\n network: ${default.id}\n vpcConnection:\n type: gcp:servicenetworking:Connection\n name: vpc_connection\n properties:\n network: ${default.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n default:\n type: gcp:compute:Network\n properties:\n name: destination-alloydb\n existing-alloydb:\n type: gcp:databasemigrationservice:ConnectionProfile\n properties:\n location: us-central1\n connectionProfileId: destination-cp\n displayName: destination-cp_display\n labels:\n foo: bar\n postgresql:\n alloydbClusterId: destination-alloydb\n options:\n dependsOn:\n - ${destinationAlloydb}\n - ${destinationAlloydbPrimary}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConnectionProfile can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/connectionProfiles/{{connection_profile_id}}`\n\n* `{{project}}/{{location}}/{{connection_profile_id}}`\n\n* `{{location}}/{{connection_profile_id}}`\n\nWhen using the `pulumi import` command, ConnectionProfile can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default projects/{{project}}/locations/{{location}}/connectionProfiles/{{connection_profile_id}}\n```\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default {{project}}/{{location}}/{{connection_profile_id}}\n```\n\n```sh\n$ pulumi import gcp:databasemigrationservice/connectionProfile:ConnectionProfile default {{location}}/{{connection_profile_id}}\n```\n\n", "properties": { "alloydb": { "$ref": "#/types/gcp:databasemigrationservice/ConnectionProfileAlloydb:ConnectionProfileAlloydb", @@ -201747,7 +203251,7 @@ } }, "gcp:dataplex/entryType:EntryType": { - "description": "An Entry Type is a template for creating Entries.\n\n\n\n## Example Usage\n\n### Dataplex Entry Type Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testEntryTypeBasic = new gcp.dataplex.EntryType(\"test_entry_type_basic\", {\n entryTypeId: \"entry-type-basic\",\n project: \"my-project-name\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_entry_type_basic = gcp.dataplex.EntryType(\"test_entry_type_basic\",\n entry_type_id=\"entry-type-basic\",\n project=\"my-project-name\",\n 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 testEntryTypeBasic = new Gcp.DataPlex.EntryType(\"test_entry_type_basic\", new()\n {\n EntryTypeId = \"entry-type-basic\",\n Project = \"my-project-name\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataplex.NewEntryType(ctx, \"test_entry_type_basic\", \u0026dataplex.EntryTypeArgs{\n\t\t\tEntryTypeId: pulumi.String(\"entry-type-basic\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\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.dataplex.EntryType;\nimport com.pulumi.gcp.dataplex.EntryTypeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testEntryTypeBasic = new EntryType(\"testEntryTypeBasic\", EntryTypeArgs.builder()\n .entryTypeId(\"entry-type-basic\")\n .project(\"my-project-name\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testEntryTypeBasic:\n type: gcp:dataplex:EntryType\n name: test_entry_type_basic\n properties:\n entryTypeId: entry-type-basic\n project: my-project-name\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Entry Type Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testEntryTypeFull = new gcp.dataplex.AspectType(\"test_entry_type_full\", {\n aspectTypeId: \"tf-test-aspect-type_22811\",\n location: \"us-central1\",\n project: \"my-project-name\",\n metadataTemplate: `{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n`,\n});\nconst testEntryTypeFullEntryType = new gcp.dataplex.EntryType(\"test_entry_type_full\", {\n entryTypeId: \"entry-type-full\",\n project: \"my-project-name\",\n location: \"us-central1\",\n labels: {\n tag: \"test-tf\",\n },\n displayName: \"terraform entry type\",\n description: \"entry type created by Terraform\",\n typeAliases: [\n \"TABLE\",\n \"DATABASE\",\n ],\n platform: \"GCS\",\n system: \"CloudSQL\",\n requiredAspects: [{\n type: testEntryTypeFull.name,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_entry_type_full = gcp.dataplex.AspectType(\"test_entry_type_full\",\n aspect_type_id=\"tf-test-aspect-type_22811\",\n location=\"us-central1\",\n project=\"my-project-name\",\n metadata_template=\"\"\"{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n\"\"\")\ntest_entry_type_full_entry_type = gcp.dataplex.EntryType(\"test_entry_type_full\",\n entry_type_id=\"entry-type-full\",\n project=\"my-project-name\",\n location=\"us-central1\",\n labels={\n \"tag\": \"test-tf\",\n },\n display_name=\"terraform entry type\",\n description=\"entry type created by Terraform\",\n type_aliases=[\n \"TABLE\",\n \"DATABASE\",\n ],\n platform=\"GCS\",\n system=\"CloudSQL\",\n required_aspects=[{\n \"type\": test_entry_type_full.name,\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testEntryTypeFull = new Gcp.DataPlex.AspectType(\"test_entry_type_full\", new()\n {\n AspectTypeId = \"tf-test-aspect-type_22811\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n MetadataTemplate = @\"{\n \"\"name\"\": \"\"tf-test-template\"\",\n \"\"type\"\": \"\"record\"\",\n \"\"recordFields\"\": [\n {\n \"\"name\"\": \"\"type\"\",\n \"\"type\"\": \"\"enum\"\",\n \"\"annotations\"\": {\n \"\"displayName\"\": \"\"Type\"\",\n \"\"description\"\": \"\"Specifies the type of view represented by the entry.\"\"\n },\n \"\"index\"\": 1,\n \"\"constraints\"\": {\n \"\"required\"\": true\n },\n \"\"enumValues\"\": [\n {\n \"\"name\"\": \"\"VIEW\"\",\n \"\"index\"\": 1\n }\n ]\n }\n ]\n}\n\",\n });\n\n var testEntryTypeFullEntryType = new Gcp.DataPlex.EntryType(\"test_entry_type_full\", new()\n {\n EntryTypeId = \"entry-type-full\",\n Project = \"my-project-name\",\n Location = \"us-central1\",\n Labels = \n {\n { \"tag\", \"test-tf\" },\n },\n DisplayName = \"terraform entry type\",\n Description = \"entry type created by Terraform\",\n TypeAliases = new[]\n {\n \"TABLE\",\n \"DATABASE\",\n },\n Platform = \"GCS\",\n System = \"CloudSQL\",\n RequiredAspects = new[]\n {\n new Gcp.DataPlex.Inputs.EntryTypeRequiredAspectArgs\n {\n Type = testEntryTypeFull.Name,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestEntryTypeFull, err := dataplex.NewAspectType(ctx, \"test_entry_type_full\", \u0026dataplex.AspectTypeArgs{\n\t\t\tAspectTypeId: pulumi.String(\"tf-test-aspect-type_22811\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tMetadataTemplate: pulumi.String(`{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewEntryType(ctx, \"test_entry_type_full\", \u0026dataplex.EntryTypeArgs{\n\t\t\tEntryTypeId: pulumi.String(\"entry-type-full\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"tag\": pulumi.String(\"test-tf\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"terraform entry type\"),\n\t\t\tDescription: pulumi.String(\"entry type created by Terraform\"),\n\t\t\tTypeAliases: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"TABLE\"),\n\t\t\t\tpulumi.String(\"DATABASE\"),\n\t\t\t},\n\t\t\tPlatform: pulumi.String(\"GCS\"),\n\t\t\tSystem: pulumi.String(\"CloudSQL\"),\n\t\t\tRequiredAspects: dataplex.EntryTypeRequiredAspectArray{\n\t\t\t\t\u0026dataplex.EntryTypeRequiredAspectArgs{\n\t\t\t\t\tType: testEntryTypeFull.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataplex.AspectType;\nimport com.pulumi.gcp.dataplex.AspectTypeArgs;\nimport com.pulumi.gcp.dataplex.EntryType;\nimport com.pulumi.gcp.dataplex.EntryTypeArgs;\nimport com.pulumi.gcp.dataplex.inputs.EntryTypeRequiredAspectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testEntryTypeFull = new AspectType(\"testEntryTypeFull\", AspectTypeArgs.builder()\n .aspectTypeId(\"tf-test-aspect-type_22811\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .metadataTemplate(\"\"\"\n{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n \"\"\")\n .build());\n\n var testEntryTypeFullEntryType = new EntryType(\"testEntryTypeFullEntryType\", EntryTypeArgs.builder()\n .entryTypeId(\"entry-type-full\")\n .project(\"my-project-name\")\n .location(\"us-central1\")\n .labels(Map.of(\"tag\", \"test-tf\"))\n .displayName(\"terraform entry type\")\n .description(\"entry type created by Terraform\")\n .typeAliases( \n \"TABLE\",\n \"DATABASE\")\n .platform(\"GCS\")\n .system(\"CloudSQL\")\n .requiredAspects(EntryTypeRequiredAspectArgs.builder()\n .type(testEntryTypeFull.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testEntryTypeFull:\n type: gcp:dataplex:AspectType\n name: test_entry_type_full\n properties:\n aspectTypeId: tf-test-aspect-type_22811\n location: us-central1\n project: my-project-name\n metadataTemplate: |\n {\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n }\n testEntryTypeFullEntryType:\n type: gcp:dataplex:EntryType\n name: test_entry_type_full\n properties:\n entryTypeId: entry-type-full\n project: my-project-name\n location: us-central1\n labels:\n tag: test-tf\n displayName: terraform entry type\n description: entry type created by Terraform\n typeAliases:\n - TABLE\n - DATABASE\n platform: GCS\n system: CloudSQL\n requiredAspects:\n - type: ${testEntryTypeFull.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEntryType can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/entryTypes/{{entry_type_id}}`\n\n* `{{project}}/{{location}}/{{entry_type_id}}`\n\n* `{{location}}/{{entry_type_id}}`\n\nWhen using the `pulumi import` command, EntryType can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default projects/{{project}}/locations/{{location}}/entryTypes/{{entry_type_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default {{project}}/{{location}}/{{entry_type_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default {{location}}/{{entry_type_id}}\n```\n\n", + "description": "An Entry Type is a template for creating Entries.\n\n\n\n## Example Usage\n\n### Dataplex Entry Type Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testEntryTypeBasic = new gcp.dataplex.EntryType(\"test_entry_type_basic\", {\n entryTypeId: \"entry-type-basic\",\n project: \"my-project-name\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_entry_type_basic = gcp.dataplex.EntryType(\"test_entry_type_basic\",\n entry_type_id=\"entry-type-basic\",\n project=\"my-project-name\",\n 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 testEntryTypeBasic = new Gcp.DataPlex.EntryType(\"test_entry_type_basic\", new()\n {\n EntryTypeId = \"entry-type-basic\",\n Project = \"my-project-name\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataplex.NewEntryType(ctx, \"test_entry_type_basic\", \u0026dataplex.EntryTypeArgs{\n\t\t\tEntryTypeId: pulumi.String(\"entry-type-basic\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\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.dataplex.EntryType;\nimport com.pulumi.gcp.dataplex.EntryTypeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testEntryTypeBasic = new EntryType(\"testEntryTypeBasic\", EntryTypeArgs.builder()\n .entryTypeId(\"entry-type-basic\")\n .project(\"my-project-name\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testEntryTypeBasic:\n type: gcp:dataplex:EntryType\n name: test_entry_type_basic\n properties:\n entryTypeId: entry-type-basic\n project: my-project-name\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Entry Type Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testEntryTypeFull = new gcp.dataplex.AspectType(\"test_entry_type_full\", {\n aspectTypeId: \"tf-test-aspect-type_91042\",\n location: \"us-central1\",\n project: \"my-project-name\",\n metadataTemplate: `{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n`,\n});\nconst testEntryTypeFullEntryType = new gcp.dataplex.EntryType(\"test_entry_type_full\", {\n entryTypeId: \"entry-type-full\",\n project: \"my-project-name\",\n location: \"us-central1\",\n labels: {\n tag: \"test-tf\",\n },\n displayName: \"terraform entry type\",\n description: \"entry type created by Terraform\",\n typeAliases: [\n \"TABLE\",\n \"DATABASE\",\n ],\n platform: \"GCS\",\n system: \"CloudSQL\",\n requiredAspects: [{\n type: testEntryTypeFull.name,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_entry_type_full = gcp.dataplex.AspectType(\"test_entry_type_full\",\n aspect_type_id=\"tf-test-aspect-type_91042\",\n location=\"us-central1\",\n project=\"my-project-name\",\n metadata_template=\"\"\"{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n\"\"\")\ntest_entry_type_full_entry_type = gcp.dataplex.EntryType(\"test_entry_type_full\",\n entry_type_id=\"entry-type-full\",\n project=\"my-project-name\",\n location=\"us-central1\",\n labels={\n \"tag\": \"test-tf\",\n },\n display_name=\"terraform entry type\",\n description=\"entry type created by Terraform\",\n type_aliases=[\n \"TABLE\",\n \"DATABASE\",\n ],\n platform=\"GCS\",\n system=\"CloudSQL\",\n required_aspects=[{\n \"type\": test_entry_type_full.name,\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testEntryTypeFull = new Gcp.DataPlex.AspectType(\"test_entry_type_full\", new()\n {\n AspectTypeId = \"tf-test-aspect-type_91042\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n MetadataTemplate = @\"{\n \"\"name\"\": \"\"tf-test-template\"\",\n \"\"type\"\": \"\"record\"\",\n \"\"recordFields\"\": [\n {\n \"\"name\"\": \"\"type\"\",\n \"\"type\"\": \"\"enum\"\",\n \"\"annotations\"\": {\n \"\"displayName\"\": \"\"Type\"\",\n \"\"description\"\": \"\"Specifies the type of view represented by the entry.\"\"\n },\n \"\"index\"\": 1,\n \"\"constraints\"\": {\n \"\"required\"\": true\n },\n \"\"enumValues\"\": [\n {\n \"\"name\"\": \"\"VIEW\"\",\n \"\"index\"\": 1\n }\n ]\n }\n ]\n}\n\",\n });\n\n var testEntryTypeFullEntryType = new Gcp.DataPlex.EntryType(\"test_entry_type_full\", new()\n {\n EntryTypeId = \"entry-type-full\",\n Project = \"my-project-name\",\n Location = \"us-central1\",\n Labels = \n {\n { \"tag\", \"test-tf\" },\n },\n DisplayName = \"terraform entry type\",\n Description = \"entry type created by Terraform\",\n TypeAliases = new[]\n {\n \"TABLE\",\n \"DATABASE\",\n },\n Platform = \"GCS\",\n System = \"CloudSQL\",\n RequiredAspects = new[]\n {\n new Gcp.DataPlex.Inputs.EntryTypeRequiredAspectArgs\n {\n Type = testEntryTypeFull.Name,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestEntryTypeFull, err := dataplex.NewAspectType(ctx, \"test_entry_type_full\", \u0026dataplex.AspectTypeArgs{\n\t\t\tAspectTypeId: pulumi.String(\"tf-test-aspect-type_91042\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tMetadataTemplate: pulumi.String(`{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewEntryType(ctx, \"test_entry_type_full\", \u0026dataplex.EntryTypeArgs{\n\t\t\tEntryTypeId: pulumi.String(\"entry-type-full\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"tag\": pulumi.String(\"test-tf\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"terraform entry type\"),\n\t\t\tDescription: pulumi.String(\"entry type created by Terraform\"),\n\t\t\tTypeAliases: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"TABLE\"),\n\t\t\t\tpulumi.String(\"DATABASE\"),\n\t\t\t},\n\t\t\tPlatform: pulumi.String(\"GCS\"),\n\t\t\tSystem: pulumi.String(\"CloudSQL\"),\n\t\t\tRequiredAspects: dataplex.EntryTypeRequiredAspectArray{\n\t\t\t\t\u0026dataplex.EntryTypeRequiredAspectArgs{\n\t\t\t\t\tType: testEntryTypeFull.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataplex.AspectType;\nimport com.pulumi.gcp.dataplex.AspectTypeArgs;\nimport com.pulumi.gcp.dataplex.EntryType;\nimport com.pulumi.gcp.dataplex.EntryTypeArgs;\nimport com.pulumi.gcp.dataplex.inputs.EntryTypeRequiredAspectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testEntryTypeFull = new AspectType(\"testEntryTypeFull\", AspectTypeArgs.builder()\n .aspectTypeId(\"tf-test-aspect-type_91042\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .metadataTemplate(\"\"\"\n{\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n}\n \"\"\")\n .build());\n\n var testEntryTypeFullEntryType = new EntryType(\"testEntryTypeFullEntryType\", EntryTypeArgs.builder()\n .entryTypeId(\"entry-type-full\")\n .project(\"my-project-name\")\n .location(\"us-central1\")\n .labels(Map.of(\"tag\", \"test-tf\"))\n .displayName(\"terraform entry type\")\n .description(\"entry type created by Terraform\")\n .typeAliases( \n \"TABLE\",\n \"DATABASE\")\n .platform(\"GCS\")\n .system(\"CloudSQL\")\n .requiredAspects(EntryTypeRequiredAspectArgs.builder()\n .type(testEntryTypeFull.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testEntryTypeFull:\n type: gcp:dataplex:AspectType\n name: test_entry_type_full\n properties:\n aspectTypeId: tf-test-aspect-type_91042\n location: us-central1\n project: my-project-name\n metadataTemplate: |\n {\n \"name\": \"tf-test-template\",\n \"type\": \"record\",\n \"recordFields\": [\n {\n \"name\": \"type\",\n \"type\": \"enum\",\n \"annotations\": {\n \"displayName\": \"Type\",\n \"description\": \"Specifies the type of view represented by the entry.\"\n },\n \"index\": 1,\n \"constraints\": {\n \"required\": true\n },\n \"enumValues\": [\n {\n \"name\": \"VIEW\",\n \"index\": 1\n }\n ]\n }\n ]\n }\n testEntryTypeFullEntryType:\n type: gcp:dataplex:EntryType\n name: test_entry_type_full\n properties:\n entryTypeId: entry-type-full\n project: my-project-name\n location: us-central1\n labels:\n tag: test-tf\n displayName: terraform entry type\n description: entry type created by Terraform\n typeAliases:\n - TABLE\n - DATABASE\n platform: GCS\n system: CloudSQL\n requiredAspects:\n - type: ${testEntryTypeFull.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEntryType can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/entryTypes/{{entry_type_id}}`\n\n* `{{project}}/{{location}}/{{entry_type_id}}`\n\n* `{{location}}/{{entry_type_id}}`\n\nWhen using the `pulumi import` command, EntryType can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default projects/{{project}}/locations/{{location}}/entryTypes/{{entry_type_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default {{project}}/{{location}}/{{entry_type_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/entryType:EntryType default {{location}}/{{entry_type_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -202841,7 +204345,7 @@ } }, "gcp:dataplex/task:Task": { - "description": "A Dataplex task represents the work that you want Dataplex to do on a schedule. It encapsulates code, parameters, and the schedule.\n\n\nTo get more information about Task, see:\n\n* [API documentation](https://cloud.google.com/dataplex/docs/reference/rest/v1/projects.locations.lakes.tasks)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dataplex/docs)\n\n## Example Usage\n\n### Dataplex Task Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example = new gcp.dataplex.Lake(\"example\", {\n name: \"tf-test-lake_91042\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleTask = new gcp.dataplex.Task(\"example\", {\n taskId: \"tf-test-task_72490\",\n location: \"us-central1\",\n lake: example.name,\n description: \"Test Task Basic\",\n displayName: \"task-basic\",\n labels: {\n count: \"3\",\n },\n triggerSpec: {\n type: \"RECURRING\",\n disabled: false,\n maxRetries: 3,\n startTime: \"2023-10-02T15:01:23Z\",\n schedule: \"1 * * * *\",\n },\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n project: \"my-project-name\",\n maxJobExecutionLifetime: \"100s\",\n kmsKey: \"234jn2kjn42k3n423\",\n },\n spark: {\n pythonScriptFile: \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample = gcp.dataplex.Lake(\"example\",\n name=\"tf-test-lake_91042\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_task = gcp.dataplex.Task(\"example\",\n task_id=\"tf-test-task_72490\",\n location=\"us-central1\",\n lake=example.name,\n description=\"Test Task Basic\",\n display_name=\"task-basic\",\n labels={\n \"count\": \"3\",\n },\n trigger_spec={\n \"type\": \"RECURRING\",\n \"disabled\": False,\n \"max_retries\": 3,\n \"start_time\": \"2023-10-02T15:01:23Z\",\n \"schedule\": \"1 * * * *\",\n },\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"project\": \"my-project-name\",\n \"max_job_execution_lifetime\": \"100s\",\n \"kms_key\": \"234jn2kjn42k3n423\",\n },\n spark={\n \"python_script_file\": \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n project=\"my-project-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 project = Gcp.Organizations.GetProject.Invoke();\n\n var example = new Gcp.DataPlex.Lake(\"example\", new()\n {\n Name = \"tf-test-lake_91042\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleTask = new Gcp.DataPlex.Task(\"example\", new()\n {\n TaskId = \"tf-test-task_72490\",\n Location = \"us-central1\",\n Lake = example.Name,\n Description = \"Test Task Basic\",\n DisplayName = \"task-basic\",\n Labels = \n {\n { \"count\", \"3\" },\n },\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"RECURRING\",\n Disabled = false,\n MaxRetries = 3,\n StartTime = \"2023-10-02T15:01:23Z\",\n Schedule = \"1 * * * *\",\n },\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Project = \"my-project-name\",\n MaxJobExecutionLifetime = \"100s\",\n KmsKey = \"234jn2kjn42k3n423\",\n },\n Spark = new Gcp.DataPlex.Inputs.TaskSparkArgs\n {\n PythonScriptFile = \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := dataplex.NewLake(ctx, \"example\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_91042\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_72490\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: example.Name,\n\t\t\tDescription: pulumi.String(\"Test Task Basic\"),\n\t\t\tDisplayName: pulumi.String(\"task-basic\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t},\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"RECURRING\"),\n\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\tMaxRetries: pulumi.Int(3),\n\t\t\t\tStartTime: pulumi.String(\"2023-10-02T15:01:23Z\"),\n\t\t\t\tSchedule: pulumi.String(\"1 * * * *\"),\n\t\t\t},\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\t\tMaxJobExecutionLifetime: pulumi.String(\"100s\"),\n\t\t\t\tKmsKey: pulumi.String(\"234jn2kjn42k3n423\"),\n\t\t\t},\n\t\t\tSpark: \u0026dataplex.TaskSparkArgs{\n\t\t\t\tPythonScriptFile: pulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example = new Lake(\"example\", LakeArgs.builder()\n .name(\"tf-test-lake_91042\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleTask = new Task(\"exampleTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_72490\")\n .location(\"us-central1\")\n .lake(example.name())\n .description(\"Test Task Basic\")\n .displayName(\"task-basic\")\n .labels(Map.of(\"count\", \"3\"))\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"RECURRING\")\n .disabled(false)\n .maxRetries(3)\n .startTime(\"2023-10-02T15:01:23Z\")\n .schedule(\"1 * * * *\")\n .build())\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .project(\"my-project-name\")\n .maxJobExecutionLifetime(\"100s\")\n .kmsKey(\"234jn2kjn42k3n423\")\n .build())\n .spark(TaskSparkArgs.builder()\n .pythonScriptFile(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:dataplex:Lake\n properties:\n name: tf-test-lake_91042\n location: us-central1\n project: my-project-name\n exampleTask:\n type: gcp:dataplex:Task\n name: example\n properties:\n taskId: tf-test-task_72490\n location: us-central1\n lake: ${example.name}\n description: Test Task Basic\n displayName: task-basic\n labels:\n count: '3'\n triggerSpec:\n type: RECURRING\n disabled: false\n maxRetries: 3\n startTime: 2023-10-02T15:01:23Z\n schedule: 1 * * * *\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n project: my-project-name\n maxJobExecutionLifetime: 100s\n kmsKey: 234jn2kjn42k3n423\n spark:\n pythonScriptFile: gs://dataproc-examples/pyspark/hello-world/hello-world.py\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Task Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// VPC network\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"tf-test-workstation-cluster_89605\",\n autoCreateSubnetworks: true,\n});\nconst project = gcp.organizations.getProject({});\nconst exampleSpark = new gcp.dataplex.Lake(\"example_spark\", {\n name: \"tf-test-lake_56730\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleSparkTask = new gcp.dataplex.Task(\"example_spark\", {\n taskId: \"tf-test-task_95154\",\n location: \"us-central1\",\n lake: exampleSpark.name,\n triggerSpec: {\n type: \"ON_DEMAND\",\n },\n description: \"task-spark-terraform\",\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n args: {\n TASK_ARGS: \"--output_location,gs://spark-job/task-result, --output_format, json\",\n },\n },\n spark: {\n infrastructureSpec: {\n batch: {\n executorsCount: 2,\n maxExecutorsCount: 100,\n },\n containerImage: {\n image: \"test-image\",\n javaJars: [\"test-java-jars.jar\"],\n pythonPackages: [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n properties: {\n name: \"wrench\",\n mass: \"1.3kg\",\n count: \"3\",\n },\n },\n vpcNetwork: {\n networkTags: [\"test-network-tag\"],\n subNetwork: _default.id,\n },\n },\n fileUris: [\"gs://terrafrom-test/test.csv\"],\n archiveUris: [\"gs://terraform-test/test.csv\"],\n sqlScript: \"show databases\",\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# VPC network\ndefault = gcp.compute.Network(\"default\",\n name=\"tf-test-workstation-cluster_89605\",\n auto_create_subnetworks=True)\nproject = gcp.organizations.get_project()\nexample_spark = gcp.dataplex.Lake(\"example_spark\",\n name=\"tf-test-lake_56730\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_spark_task = gcp.dataplex.Task(\"example_spark\",\n task_id=\"tf-test-task_95154\",\n location=\"us-central1\",\n lake=example_spark.name,\n trigger_spec={\n \"type\": \"ON_DEMAND\",\n },\n description=\"task-spark-terraform\",\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"args\": {\n \"TASK_ARGS\": \"--output_location,gs://spark-job/task-result, --output_format, json\",\n },\n },\n spark={\n \"infrastructure_spec\": {\n \"batch\": {\n \"executors_count\": 2,\n \"max_executors_count\": 100,\n },\n \"container_image\": {\n \"image\": \"test-image\",\n \"java_jars\": [\"test-java-jars.jar\"],\n \"python_packages\": [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n \"properties\": {\n \"name\": \"wrench\",\n \"mass\": \"1.3kg\",\n \"count\": \"3\",\n },\n },\n \"vpc_network\": {\n \"network_tags\": [\"test-network-tag\"],\n \"sub_network\": default.id,\n },\n },\n \"file_uris\": [\"gs://terrafrom-test/test.csv\"],\n \"archive_uris\": [\"gs://terraform-test/test.csv\"],\n \"sql_script\": \"show databases\",\n },\n project=\"my-project-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 // VPC network\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"tf-test-workstation-cluster_89605\",\n AutoCreateSubnetworks = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleSpark = new Gcp.DataPlex.Lake(\"example_spark\", new()\n {\n Name = \"tf-test-lake_56730\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleSparkTask = new Gcp.DataPlex.Task(\"example_spark\", new()\n {\n TaskId = \"tf-test-task_95154\",\n Location = \"us-central1\",\n Lake = exampleSpark.Name,\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"ON_DEMAND\",\n },\n Description = \"task-spark-terraform\",\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Args = \n {\n { \"TASK_ARGS\", \"--output_location,gs://spark-job/task-result, --output_format, json\" },\n },\n },\n Spark = new Gcp.DataPlex.Inputs.TaskSparkArgs\n {\n InfrastructureSpec = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecArgs\n {\n Batch = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecBatchArgs\n {\n ExecutorsCount = 2,\n MaxExecutorsCount = 100,\n },\n ContainerImage = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecContainerImageArgs\n {\n Image = \"test-image\",\n JavaJars = new[]\n {\n \"test-java-jars.jar\",\n },\n PythonPackages = new[]\n {\n \"gs://bucket-name/my/path/to/lib.tar.gz\",\n },\n Properties = \n {\n { \"name\", \"wrench\" },\n { \"mass\", \"1.3kg\" },\n { \"count\", \"3\" },\n },\n },\n VpcNetwork = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecVpcNetworkArgs\n {\n NetworkTags = new[]\n {\n \"test-network-tag\",\n },\n SubNetwork = @default.Id,\n },\n },\n FileUris = new[]\n {\n \"gs://terrafrom-test/test.csv\",\n },\n ArchiveUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n SqlScript = \"show databases\",\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// VPC network\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-workstation-cluster_89605\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleSpark, err := dataplex.NewLake(ctx, \"example_spark\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_56730\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example_spark\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_95154\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: exampleSpark.Name,\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"ON_DEMAND\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"task-spark-terraform\"),\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"TASK_ARGS\": pulumi.String(\"--output_location,gs://spark-job/task-result, --output_format, json\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpark: \u0026dataplex.TaskSparkArgs{\n\t\t\t\tInfrastructureSpec: \u0026dataplex.TaskSparkInfrastructureSpecArgs{\n\t\t\t\t\tBatch: \u0026dataplex.TaskSparkInfrastructureSpecBatchArgs{\n\t\t\t\t\t\tExecutorsCount: pulumi.Int(2),\n\t\t\t\t\t\tMaxExecutorsCount: pulumi.Int(100),\n\t\t\t\t\t},\n\t\t\t\t\tContainerImage: \u0026dataplex.TaskSparkInfrastructureSpecContainerImageArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"test-image\"),\n\t\t\t\t\t\tJavaJars: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-java-jars.jar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPythonPackages: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"gs://bucket-name/my/path/to/lib.tar.gz\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\t\t\"name\": pulumi.String(\"wrench\"),\n\t\t\t\t\t\t\t\"mass\": pulumi.String(\"1.3kg\"),\n\t\t\t\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: \u0026dataplex.TaskSparkInfrastructureSpecVpcNetworkArgs{\n\t\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-network-tag\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSubNetwork: _default.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terrafrom-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tSqlScript: pulumi.String(\"show databases\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecBatchArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecContainerImageArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // VPC network\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"tf-test-workstation-cluster_89605\")\n .autoCreateSubnetworks(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var exampleSpark = new Lake(\"exampleSpark\", LakeArgs.builder()\n .name(\"tf-test-lake_56730\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleSparkTask = new Task(\"exampleSparkTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_95154\")\n .location(\"us-central1\")\n .lake(exampleSpark.name())\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"ON_DEMAND\")\n .build())\n .description(\"task-spark-terraform\")\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .args(Map.of(\"TASK_ARGS\", \"--output_location,gs://spark-job/task-result, --output_format, json\"))\n .build())\n .spark(TaskSparkArgs.builder()\n .infrastructureSpec(TaskSparkInfrastructureSpecArgs.builder()\n .batch(TaskSparkInfrastructureSpecBatchArgs.builder()\n .executorsCount(2)\n .maxExecutorsCount(100)\n .build())\n .containerImage(TaskSparkInfrastructureSpecContainerImageArgs.builder()\n .image(\"test-image\")\n .javaJars(\"test-java-jars.jar\")\n .pythonPackages(\"gs://bucket-name/my/path/to/lib.tar.gz\")\n .properties(Map.ofEntries(\n Map.entry(\"name\", \"wrench\"),\n Map.entry(\"mass\", \"1.3kg\"),\n Map.entry(\"count\", \"3\")\n ))\n .build())\n .vpcNetwork(TaskSparkInfrastructureSpecVpcNetworkArgs.builder()\n .networkTags(\"test-network-tag\")\n .subNetwork(default_.id())\n .build())\n .build())\n .fileUris(\"gs://terrafrom-test/test.csv\")\n .archiveUris(\"gs://terraform-test/test.csv\")\n .sqlScript(\"show databases\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # VPC network\n default:\n type: gcp:compute:Network\n properties:\n name: tf-test-workstation-cluster_89605\n autoCreateSubnetworks: true\n exampleSpark:\n type: gcp:dataplex:Lake\n name: example_spark\n properties:\n name: tf-test-lake_56730\n location: us-central1\n project: my-project-name\n exampleSparkTask:\n type: gcp:dataplex:Task\n name: example_spark\n properties:\n taskId: tf-test-task_95154\n location: us-central1\n lake: ${exampleSpark.name}\n triggerSpec:\n type: ON_DEMAND\n description: task-spark-terraform\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n args:\n TASK_ARGS: --output_location,gs://spark-job/task-result, --output_format, json\n spark:\n infrastructureSpec:\n batch:\n executorsCount: 2\n maxExecutorsCount: 100\n containerImage:\n image: test-image\n javaJars:\n - test-java-jars.jar\n pythonPackages:\n - gs://bucket-name/my/path/to/lib.tar.gz\n properties:\n name: wrench\n mass: 1.3kg\n count: '3'\n vpcNetwork:\n networkTags:\n - test-network-tag\n subNetwork: ${default.id}\n fileUris:\n - gs://terrafrom-test/test.csv\n archiveUris:\n - gs://terraform-test/test.csv\n sqlScript: show databases\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Task Notebook\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// VPC network\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"tf-test-workstation-cluster_64336\",\n autoCreateSubnetworks: true,\n});\nconst project = gcp.organizations.getProject({});\nconst exampleNotebook = new gcp.dataplex.Lake(\"example_notebook\", {\n name: \"tf-test-lake_34962\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleNotebookTask = new gcp.dataplex.Task(\"example_notebook\", {\n taskId: \"tf-test-task_74000\",\n location: \"us-central1\",\n lake: exampleNotebook.name,\n triggerSpec: {\n type: \"RECURRING\",\n schedule: \"1 * * * *\",\n },\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n args: {\n TASK_ARGS: \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\",\n },\n },\n notebook: {\n notebook: \"gs://terraform-test/test-notebook.ipynb\",\n infrastructureSpec: {\n batch: {\n executorsCount: 2,\n maxExecutorsCount: 100,\n },\n containerImage: {\n image: \"test-image\",\n javaJars: [\"test-java-jars.jar\"],\n pythonPackages: [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n properties: {\n name: \"wrench\",\n mass: \"1.3kg\",\n count: \"3\",\n },\n },\n vpcNetwork: {\n networkTags: [\"test-network-tag\"],\n network: _default.id,\n },\n },\n fileUris: [\"gs://terraform-test/test.csv\"],\n archiveUris: [\"gs://terraform-test/test.csv\"],\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# VPC network\ndefault = gcp.compute.Network(\"default\",\n name=\"tf-test-workstation-cluster_64336\",\n auto_create_subnetworks=True)\nproject = gcp.organizations.get_project()\nexample_notebook = gcp.dataplex.Lake(\"example_notebook\",\n name=\"tf-test-lake_34962\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_notebook_task = gcp.dataplex.Task(\"example_notebook\",\n task_id=\"tf-test-task_74000\",\n location=\"us-central1\",\n lake=example_notebook.name,\n trigger_spec={\n \"type\": \"RECURRING\",\n \"schedule\": \"1 * * * *\",\n },\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"args\": {\n \"TASK_ARGS\": \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\",\n },\n },\n notebook={\n \"notebook\": \"gs://terraform-test/test-notebook.ipynb\",\n \"infrastructure_spec\": {\n \"batch\": {\n \"executors_count\": 2,\n \"max_executors_count\": 100,\n },\n \"container_image\": {\n \"image\": \"test-image\",\n \"java_jars\": [\"test-java-jars.jar\"],\n \"python_packages\": [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n \"properties\": {\n \"name\": \"wrench\",\n \"mass\": \"1.3kg\",\n \"count\": \"3\",\n },\n },\n \"vpc_network\": {\n \"network_tags\": [\"test-network-tag\"],\n \"network\": default.id,\n },\n },\n \"file_uris\": [\"gs://terraform-test/test.csv\"],\n \"archive_uris\": [\"gs://terraform-test/test.csv\"],\n },\n project=\"my-project-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 // VPC network\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"tf-test-workstation-cluster_64336\",\n AutoCreateSubnetworks = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleNotebook = new Gcp.DataPlex.Lake(\"example_notebook\", new()\n {\n Name = \"tf-test-lake_34962\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleNotebookTask = new Gcp.DataPlex.Task(\"example_notebook\", new()\n {\n TaskId = \"tf-test-task_74000\",\n Location = \"us-central1\",\n Lake = exampleNotebook.Name,\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"RECURRING\",\n Schedule = \"1 * * * *\",\n },\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Args = \n {\n { \"TASK_ARGS\", \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\" },\n },\n },\n Notebook = new Gcp.DataPlex.Inputs.TaskNotebookArgs\n {\n Notebook = \"gs://terraform-test/test-notebook.ipynb\",\n InfrastructureSpec = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecArgs\n {\n Batch = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecBatchArgs\n {\n ExecutorsCount = 2,\n MaxExecutorsCount = 100,\n },\n ContainerImage = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecContainerImageArgs\n {\n Image = \"test-image\",\n JavaJars = new[]\n {\n \"test-java-jars.jar\",\n },\n PythonPackages = new[]\n {\n \"gs://bucket-name/my/path/to/lib.tar.gz\",\n },\n Properties = \n {\n { \"name\", \"wrench\" },\n { \"mass\", \"1.3kg\" },\n { \"count\", \"3\" },\n },\n },\n VpcNetwork = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecVpcNetworkArgs\n {\n NetworkTags = new[]\n {\n \"test-network-tag\",\n },\n Network = @default.Id,\n },\n },\n FileUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n ArchiveUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// VPC network\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-workstation-cluster_64336\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNotebook, err := dataplex.NewLake(ctx, \"example_notebook\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_34962\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example_notebook\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_74000\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: exampleNotebook.Name,\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"RECURRING\"),\n\t\t\t\tSchedule: pulumi.String(\"1 * * * *\"),\n\t\t\t},\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"TASK_ARGS\": pulumi.String(\"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNotebook: \u0026dataplex.TaskNotebookArgs{\n\t\t\t\tNotebook: pulumi.String(\"gs://terraform-test/test-notebook.ipynb\"),\n\t\t\t\tInfrastructureSpec: \u0026dataplex.TaskNotebookInfrastructureSpecArgs{\n\t\t\t\t\tBatch: \u0026dataplex.TaskNotebookInfrastructureSpecBatchArgs{\n\t\t\t\t\t\tExecutorsCount: pulumi.Int(2),\n\t\t\t\t\t\tMaxExecutorsCount: pulumi.Int(100),\n\t\t\t\t\t},\n\t\t\t\t\tContainerImage: \u0026dataplex.TaskNotebookInfrastructureSpecContainerImageArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"test-image\"),\n\t\t\t\t\t\tJavaJars: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-java-jars.jar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPythonPackages: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"gs://bucket-name/my/path/to/lib.tar.gz\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\t\t\"name\": pulumi.String(\"wrench\"),\n\t\t\t\t\t\t\t\"mass\": pulumi.String(\"1.3kg\"),\n\t\t\t\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: \u0026dataplex.TaskNotebookInfrastructureSpecVpcNetworkArgs{\n\t\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-network-tag\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNetwork: _default.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecBatchArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecContainerImageArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // VPC network\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"tf-test-workstation-cluster_64336\")\n .autoCreateSubnetworks(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var exampleNotebook = new Lake(\"exampleNotebook\", LakeArgs.builder()\n .name(\"tf-test-lake_34962\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleNotebookTask = new Task(\"exampleNotebookTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_74000\")\n .location(\"us-central1\")\n .lake(exampleNotebook.name())\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"RECURRING\")\n .schedule(\"1 * * * *\")\n .build())\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .args(Map.of(\"TASK_ARGS\", \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\"))\n .build())\n .notebook(TaskNotebookArgs.builder()\n .notebook(\"gs://terraform-test/test-notebook.ipynb\")\n .infrastructureSpec(TaskNotebookInfrastructureSpecArgs.builder()\n .batch(TaskNotebookInfrastructureSpecBatchArgs.builder()\n .executorsCount(2)\n .maxExecutorsCount(100)\n .build())\n .containerImage(TaskNotebookInfrastructureSpecContainerImageArgs.builder()\n .image(\"test-image\")\n .javaJars(\"test-java-jars.jar\")\n .pythonPackages(\"gs://bucket-name/my/path/to/lib.tar.gz\")\n .properties(Map.ofEntries(\n Map.entry(\"name\", \"wrench\"),\n Map.entry(\"mass\", \"1.3kg\"),\n Map.entry(\"count\", \"3\")\n ))\n .build())\n .vpcNetwork(TaskNotebookInfrastructureSpecVpcNetworkArgs.builder()\n .networkTags(\"test-network-tag\")\n .network(default_.id())\n .build())\n .build())\n .fileUris(\"gs://terraform-test/test.csv\")\n .archiveUris(\"gs://terraform-test/test.csv\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # VPC network\n default:\n type: gcp:compute:Network\n properties:\n name: tf-test-workstation-cluster_64336\n autoCreateSubnetworks: true\n exampleNotebook:\n type: gcp:dataplex:Lake\n name: example_notebook\n properties:\n name: tf-test-lake_34962\n location: us-central1\n project: my-project-name\n exampleNotebookTask:\n type: gcp:dataplex:Task\n name: example_notebook\n properties:\n taskId: tf-test-task_74000\n location: us-central1\n lake: ${exampleNotebook.name}\n triggerSpec:\n type: RECURRING\n schedule: 1 * * * *\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n args:\n TASK_ARGS: --output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\n notebook:\n notebook: gs://terraform-test/test-notebook.ipynb\n infrastructureSpec:\n batch:\n executorsCount: 2\n maxExecutorsCount: 100\n containerImage:\n image: test-image\n javaJars:\n - test-java-jars.jar\n pythonPackages:\n - gs://bucket-name/my/path/to/lib.tar.gz\n properties:\n name: wrench\n mass: 1.3kg\n count: '3'\n vpcNetwork:\n networkTags:\n - test-network-tag\n network: ${default.id}\n fileUris:\n - gs://terraform-test/test.csv\n archiveUris:\n - gs://terraform-test/test.csv\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTask can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/lakes/{{lake}}/tasks/{{task_id}}`\n\n* `{{project}}/{{location}}/{{lake}}/{{task_id}}`\n\n* `{{location}}/{{lake}}/{{task_id}}`\n\nWhen using the `pulumi import` command, Task can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default projects/{{project}}/locations/{{location}}/lakes/{{lake}}/tasks/{{task_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default {{project}}/{{location}}/{{lake}}/{{task_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default {{location}}/{{lake}}/{{task_id}}\n```\n\n", + "description": "A Dataplex task represents the work that you want Dataplex to do on a schedule. It encapsulates code, parameters, and the schedule.\n\n\nTo get more information about Task, see:\n\n* [API documentation](https://cloud.google.com/dataplex/docs/reference/rest/v1/projects.locations.lakes.tasks)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dataplex/docs)\n\n## Example Usage\n\n### Dataplex Task Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example = new gcp.dataplex.Lake(\"example\", {\n name: \"tf-test-lake_72490\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleTask = new gcp.dataplex.Task(\"example\", {\n taskId: \"tf-test-task_89605\",\n location: \"us-central1\",\n lake: example.name,\n description: \"Test Task Basic\",\n displayName: \"task-basic\",\n labels: {\n count: \"3\",\n },\n triggerSpec: {\n type: \"RECURRING\",\n disabled: false,\n maxRetries: 3,\n startTime: \"2023-10-02T15:01:23Z\",\n schedule: \"1 * * * *\",\n },\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n project: \"my-project-name\",\n maxJobExecutionLifetime: \"100s\",\n kmsKey: \"234jn2kjn42k3n423\",\n },\n spark: {\n pythonScriptFile: \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample = gcp.dataplex.Lake(\"example\",\n name=\"tf-test-lake_72490\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_task = gcp.dataplex.Task(\"example\",\n task_id=\"tf-test-task_89605\",\n location=\"us-central1\",\n lake=example.name,\n description=\"Test Task Basic\",\n display_name=\"task-basic\",\n labels={\n \"count\": \"3\",\n },\n trigger_spec={\n \"type\": \"RECURRING\",\n \"disabled\": False,\n \"max_retries\": 3,\n \"start_time\": \"2023-10-02T15:01:23Z\",\n \"schedule\": \"1 * * * *\",\n },\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"project\": \"my-project-name\",\n \"max_job_execution_lifetime\": \"100s\",\n \"kms_key\": \"234jn2kjn42k3n423\",\n },\n spark={\n \"python_script_file\": \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n project=\"my-project-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 project = Gcp.Organizations.GetProject.Invoke();\n\n var example = new Gcp.DataPlex.Lake(\"example\", new()\n {\n Name = \"tf-test-lake_72490\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleTask = new Gcp.DataPlex.Task(\"example\", new()\n {\n TaskId = \"tf-test-task_89605\",\n Location = \"us-central1\",\n Lake = example.Name,\n Description = \"Test Task Basic\",\n DisplayName = \"task-basic\",\n Labels = \n {\n { \"count\", \"3\" },\n },\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"RECURRING\",\n Disabled = false,\n MaxRetries = 3,\n StartTime = \"2023-10-02T15:01:23Z\",\n Schedule = \"1 * * * *\",\n },\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Project = \"my-project-name\",\n MaxJobExecutionLifetime = \"100s\",\n KmsKey = \"234jn2kjn42k3n423\",\n },\n Spark = new Gcp.DataPlex.Inputs.TaskSparkArgs\n {\n PythonScriptFile = \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample, err := dataplex.NewLake(ctx, \"example\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_72490\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_89605\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: example.Name,\n\t\t\tDescription: pulumi.String(\"Test Task Basic\"),\n\t\t\tDisplayName: pulumi.String(\"task-basic\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t},\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"RECURRING\"),\n\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\tMaxRetries: pulumi.Int(3),\n\t\t\t\tStartTime: pulumi.String(\"2023-10-02T15:01:23Z\"),\n\t\t\t\tSchedule: pulumi.String(\"1 * * * *\"),\n\t\t\t},\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\t\tMaxJobExecutionLifetime: pulumi.String(\"100s\"),\n\t\t\t\tKmsKey: pulumi.String(\"234jn2kjn42k3n423\"),\n\t\t\t},\n\t\t\tSpark: \u0026dataplex.TaskSparkArgs{\n\t\t\t\tPythonScriptFile: pulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example = new Lake(\"example\", LakeArgs.builder()\n .name(\"tf-test-lake_72490\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleTask = new Task(\"exampleTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_89605\")\n .location(\"us-central1\")\n .lake(example.name())\n .description(\"Test Task Basic\")\n .displayName(\"task-basic\")\n .labels(Map.of(\"count\", \"3\"))\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"RECURRING\")\n .disabled(false)\n .maxRetries(3)\n .startTime(\"2023-10-02T15:01:23Z\")\n .schedule(\"1 * * * *\")\n .build())\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .project(\"my-project-name\")\n .maxJobExecutionLifetime(\"100s\")\n .kmsKey(\"234jn2kjn42k3n423\")\n .build())\n .spark(TaskSparkArgs.builder()\n .pythonScriptFile(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:dataplex:Lake\n properties:\n name: tf-test-lake_72490\n location: us-central1\n project: my-project-name\n exampleTask:\n type: gcp:dataplex:Task\n name: example\n properties:\n taskId: tf-test-task_89605\n location: us-central1\n lake: ${example.name}\n description: Test Task Basic\n displayName: task-basic\n labels:\n count: '3'\n triggerSpec:\n type: RECURRING\n disabled: false\n maxRetries: 3\n startTime: 2023-10-02T15:01:23Z\n schedule: 1 * * * *\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n project: my-project-name\n maxJobExecutionLifetime: 100s\n kmsKey: 234jn2kjn42k3n423\n spark:\n pythonScriptFile: gs://dataproc-examples/pyspark/hello-world/hello-world.py\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Task Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// VPC network\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"tf-test-workstation-cluster_56730\",\n autoCreateSubnetworks: true,\n});\nconst project = gcp.organizations.getProject({});\nconst exampleSpark = new gcp.dataplex.Lake(\"example_spark\", {\n name: \"tf-test-lake_95154\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleSparkTask = new gcp.dataplex.Task(\"example_spark\", {\n taskId: \"tf-test-task_64336\",\n location: \"us-central1\",\n lake: exampleSpark.name,\n triggerSpec: {\n type: \"ON_DEMAND\",\n },\n description: \"task-spark-terraform\",\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n args: {\n TASK_ARGS: \"--output_location,gs://spark-job/task-result, --output_format, json\",\n },\n },\n spark: {\n infrastructureSpec: {\n batch: {\n executorsCount: 2,\n maxExecutorsCount: 100,\n },\n containerImage: {\n image: \"test-image\",\n javaJars: [\"test-java-jars.jar\"],\n pythonPackages: [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n properties: {\n name: \"wrench\",\n mass: \"1.3kg\",\n count: \"3\",\n },\n },\n vpcNetwork: {\n networkTags: [\"test-network-tag\"],\n subNetwork: _default.id,\n },\n },\n fileUris: [\"gs://terrafrom-test/test.csv\"],\n archiveUris: [\"gs://terraform-test/test.csv\"],\n sqlScript: \"show databases\",\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# VPC network\ndefault = gcp.compute.Network(\"default\",\n name=\"tf-test-workstation-cluster_56730\",\n auto_create_subnetworks=True)\nproject = gcp.organizations.get_project()\nexample_spark = gcp.dataplex.Lake(\"example_spark\",\n name=\"tf-test-lake_95154\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_spark_task = gcp.dataplex.Task(\"example_spark\",\n task_id=\"tf-test-task_64336\",\n location=\"us-central1\",\n lake=example_spark.name,\n trigger_spec={\n \"type\": \"ON_DEMAND\",\n },\n description=\"task-spark-terraform\",\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"args\": {\n \"TASK_ARGS\": \"--output_location,gs://spark-job/task-result, --output_format, json\",\n },\n },\n spark={\n \"infrastructure_spec\": {\n \"batch\": {\n \"executors_count\": 2,\n \"max_executors_count\": 100,\n },\n \"container_image\": {\n \"image\": \"test-image\",\n \"java_jars\": [\"test-java-jars.jar\"],\n \"python_packages\": [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n \"properties\": {\n \"name\": \"wrench\",\n \"mass\": \"1.3kg\",\n \"count\": \"3\",\n },\n },\n \"vpc_network\": {\n \"network_tags\": [\"test-network-tag\"],\n \"sub_network\": default.id,\n },\n },\n \"file_uris\": [\"gs://terrafrom-test/test.csv\"],\n \"archive_uris\": [\"gs://terraform-test/test.csv\"],\n \"sql_script\": \"show databases\",\n },\n project=\"my-project-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 // VPC network\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"tf-test-workstation-cluster_56730\",\n AutoCreateSubnetworks = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleSpark = new Gcp.DataPlex.Lake(\"example_spark\", new()\n {\n Name = \"tf-test-lake_95154\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleSparkTask = new Gcp.DataPlex.Task(\"example_spark\", new()\n {\n TaskId = \"tf-test-task_64336\",\n Location = \"us-central1\",\n Lake = exampleSpark.Name,\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"ON_DEMAND\",\n },\n Description = \"task-spark-terraform\",\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Args = \n {\n { \"TASK_ARGS\", \"--output_location,gs://spark-job/task-result, --output_format, json\" },\n },\n },\n Spark = new Gcp.DataPlex.Inputs.TaskSparkArgs\n {\n InfrastructureSpec = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecArgs\n {\n Batch = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecBatchArgs\n {\n ExecutorsCount = 2,\n MaxExecutorsCount = 100,\n },\n ContainerImage = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecContainerImageArgs\n {\n Image = \"test-image\",\n JavaJars = new[]\n {\n \"test-java-jars.jar\",\n },\n PythonPackages = new[]\n {\n \"gs://bucket-name/my/path/to/lib.tar.gz\",\n },\n Properties = \n {\n { \"name\", \"wrench\" },\n { \"mass\", \"1.3kg\" },\n { \"count\", \"3\" },\n },\n },\n VpcNetwork = new Gcp.DataPlex.Inputs.TaskSparkInfrastructureSpecVpcNetworkArgs\n {\n NetworkTags = new[]\n {\n \"test-network-tag\",\n },\n SubNetwork = @default.Id,\n },\n },\n FileUris = new[]\n {\n \"gs://terrafrom-test/test.csv\",\n },\n ArchiveUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n SqlScript = \"show databases\",\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// VPC network\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-workstation-cluster_56730\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleSpark, err := dataplex.NewLake(ctx, \"example_spark\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_95154\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example_spark\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_64336\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: exampleSpark.Name,\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"ON_DEMAND\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"task-spark-terraform\"),\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"TASK_ARGS\": pulumi.String(\"--output_location,gs://spark-job/task-result, --output_format, json\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSpark: \u0026dataplex.TaskSparkArgs{\n\t\t\t\tInfrastructureSpec: \u0026dataplex.TaskSparkInfrastructureSpecArgs{\n\t\t\t\t\tBatch: \u0026dataplex.TaskSparkInfrastructureSpecBatchArgs{\n\t\t\t\t\t\tExecutorsCount: pulumi.Int(2),\n\t\t\t\t\t\tMaxExecutorsCount: pulumi.Int(100),\n\t\t\t\t\t},\n\t\t\t\t\tContainerImage: \u0026dataplex.TaskSparkInfrastructureSpecContainerImageArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"test-image\"),\n\t\t\t\t\t\tJavaJars: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-java-jars.jar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPythonPackages: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"gs://bucket-name/my/path/to/lib.tar.gz\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\t\t\"name\": pulumi.String(\"wrench\"),\n\t\t\t\t\t\t\t\"mass\": pulumi.String(\"1.3kg\"),\n\t\t\t\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: \u0026dataplex.TaskSparkInfrastructureSpecVpcNetworkArgs{\n\t\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-network-tag\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSubNetwork: _default.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terrafrom-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tSqlScript: pulumi.String(\"show databases\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecBatchArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecContainerImageArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskSparkInfrastructureSpecVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // VPC network\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"tf-test-workstation-cluster_56730\")\n .autoCreateSubnetworks(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var exampleSpark = new Lake(\"exampleSpark\", LakeArgs.builder()\n .name(\"tf-test-lake_95154\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleSparkTask = new Task(\"exampleSparkTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_64336\")\n .location(\"us-central1\")\n .lake(exampleSpark.name())\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"ON_DEMAND\")\n .build())\n .description(\"task-spark-terraform\")\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .args(Map.of(\"TASK_ARGS\", \"--output_location,gs://spark-job/task-result, --output_format, json\"))\n .build())\n .spark(TaskSparkArgs.builder()\n .infrastructureSpec(TaskSparkInfrastructureSpecArgs.builder()\n .batch(TaskSparkInfrastructureSpecBatchArgs.builder()\n .executorsCount(2)\n .maxExecutorsCount(100)\n .build())\n .containerImage(TaskSparkInfrastructureSpecContainerImageArgs.builder()\n .image(\"test-image\")\n .javaJars(\"test-java-jars.jar\")\n .pythonPackages(\"gs://bucket-name/my/path/to/lib.tar.gz\")\n .properties(Map.ofEntries(\n Map.entry(\"name\", \"wrench\"),\n Map.entry(\"mass\", \"1.3kg\"),\n Map.entry(\"count\", \"3\")\n ))\n .build())\n .vpcNetwork(TaskSparkInfrastructureSpecVpcNetworkArgs.builder()\n .networkTags(\"test-network-tag\")\n .subNetwork(default_.id())\n .build())\n .build())\n .fileUris(\"gs://terrafrom-test/test.csv\")\n .archiveUris(\"gs://terraform-test/test.csv\")\n .sqlScript(\"show databases\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # VPC network\n default:\n type: gcp:compute:Network\n properties:\n name: tf-test-workstation-cluster_56730\n autoCreateSubnetworks: true\n exampleSpark:\n type: gcp:dataplex:Lake\n name: example_spark\n properties:\n name: tf-test-lake_95154\n location: us-central1\n project: my-project-name\n exampleSparkTask:\n type: gcp:dataplex:Task\n name: example_spark\n properties:\n taskId: tf-test-task_64336\n location: us-central1\n lake: ${exampleSpark.name}\n triggerSpec:\n type: ON_DEMAND\n description: task-spark-terraform\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n args:\n TASK_ARGS: --output_location,gs://spark-job/task-result, --output_format, json\n spark:\n infrastructureSpec:\n batch:\n executorsCount: 2\n maxExecutorsCount: 100\n containerImage:\n image: test-image\n javaJars:\n - test-java-jars.jar\n pythonPackages:\n - gs://bucket-name/my/path/to/lib.tar.gz\n properties:\n name: wrench\n mass: 1.3kg\n count: '3'\n vpcNetwork:\n networkTags:\n - test-network-tag\n subNetwork: ${default.id}\n fileUris:\n - gs://terrafrom-test/test.csv\n archiveUris:\n - gs://terraform-test/test.csv\n sqlScript: show databases\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataplex Task Notebook\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// VPC network\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"tf-test-workstation-cluster_34962\",\n autoCreateSubnetworks: true,\n});\nconst project = gcp.organizations.getProject({});\nconst exampleNotebook = new gcp.dataplex.Lake(\"example_notebook\", {\n name: \"tf-test-lake_74000\",\n location: \"us-central1\",\n project: \"my-project-name\",\n});\nconst exampleNotebookTask = new gcp.dataplex.Task(\"example_notebook\", {\n taskId: \"tf-test-task_75125\",\n location: \"us-central1\",\n lake: exampleNotebook.name,\n triggerSpec: {\n type: \"RECURRING\",\n schedule: \"1 * * * *\",\n },\n executionSpec: {\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n args: {\n TASK_ARGS: \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\",\n },\n },\n notebook: {\n notebook: \"gs://terraform-test/test-notebook.ipynb\",\n infrastructureSpec: {\n batch: {\n executorsCount: 2,\n maxExecutorsCount: 100,\n },\n containerImage: {\n image: \"test-image\",\n javaJars: [\"test-java-jars.jar\"],\n pythonPackages: [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n properties: {\n name: \"wrench\",\n mass: \"1.3kg\",\n count: \"3\",\n },\n },\n vpcNetwork: {\n networkTags: [\"test-network-tag\"],\n network: _default.id,\n },\n },\n fileUris: [\"gs://terraform-test/test.csv\"],\n archiveUris: [\"gs://terraform-test/test.csv\"],\n },\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# VPC network\ndefault = gcp.compute.Network(\"default\",\n name=\"tf-test-workstation-cluster_34962\",\n auto_create_subnetworks=True)\nproject = gcp.organizations.get_project()\nexample_notebook = gcp.dataplex.Lake(\"example_notebook\",\n name=\"tf-test-lake_74000\",\n location=\"us-central1\",\n project=\"my-project-name\")\nexample_notebook_task = gcp.dataplex.Task(\"example_notebook\",\n task_id=\"tf-test-task_75125\",\n location=\"us-central1\",\n lake=example_notebook.name,\n trigger_spec={\n \"type\": \"RECURRING\",\n \"schedule\": \"1 * * * *\",\n },\n execution_spec={\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"args\": {\n \"TASK_ARGS\": \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\",\n },\n },\n notebook={\n \"notebook\": \"gs://terraform-test/test-notebook.ipynb\",\n \"infrastructure_spec\": {\n \"batch\": {\n \"executors_count\": 2,\n \"max_executors_count\": 100,\n },\n \"container_image\": {\n \"image\": \"test-image\",\n \"java_jars\": [\"test-java-jars.jar\"],\n \"python_packages\": [\"gs://bucket-name/my/path/to/lib.tar.gz\"],\n \"properties\": {\n \"name\": \"wrench\",\n \"mass\": \"1.3kg\",\n \"count\": \"3\",\n },\n },\n \"vpc_network\": {\n \"network_tags\": [\"test-network-tag\"],\n \"network\": default.id,\n },\n },\n \"file_uris\": [\"gs://terraform-test/test.csv\"],\n \"archive_uris\": [\"gs://terraform-test/test.csv\"],\n },\n project=\"my-project-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 // VPC network\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"tf-test-workstation-cluster_34962\",\n AutoCreateSubnetworks = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleNotebook = new Gcp.DataPlex.Lake(\"example_notebook\", new()\n {\n Name = \"tf-test-lake_74000\",\n Location = \"us-central1\",\n Project = \"my-project-name\",\n });\n\n var exampleNotebookTask = new Gcp.DataPlex.Task(\"example_notebook\", new()\n {\n TaskId = \"tf-test-task_75125\",\n Location = \"us-central1\",\n Lake = exampleNotebook.Name,\n TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs\n {\n Type = \"RECURRING\",\n Schedule = \"1 * * * *\",\n },\n ExecutionSpec = new Gcp.DataPlex.Inputs.TaskExecutionSpecArgs\n {\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n Args = \n {\n { \"TASK_ARGS\", \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\" },\n },\n },\n Notebook = new Gcp.DataPlex.Inputs.TaskNotebookArgs\n {\n Notebook = \"gs://terraform-test/test-notebook.ipynb\",\n InfrastructureSpec = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecArgs\n {\n Batch = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecBatchArgs\n {\n ExecutorsCount = 2,\n MaxExecutorsCount = 100,\n },\n ContainerImage = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecContainerImageArgs\n {\n Image = \"test-image\",\n JavaJars = new[]\n {\n \"test-java-jars.jar\",\n },\n PythonPackages = new[]\n {\n \"gs://bucket-name/my/path/to/lib.tar.gz\",\n },\n Properties = \n {\n { \"name\", \"wrench\" },\n { \"mass\", \"1.3kg\" },\n { \"count\", \"3\" },\n },\n },\n VpcNetwork = new Gcp.DataPlex.Inputs.TaskNotebookInfrastructureSpecVpcNetworkArgs\n {\n NetworkTags = new[]\n {\n \"test-network-tag\",\n },\n Network = @default.Id,\n },\n },\n FileUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n ArchiveUris = new[]\n {\n \"gs://terraform-test/test.csv\",\n },\n },\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataplex\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// VPC network\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-workstation-cluster_34962\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNotebook, err := dataplex.NewLake(ctx, \"example_notebook\", \u0026dataplex.LakeArgs{\n\t\t\tName: pulumi.String(\"tf-test-lake_74000\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataplex.NewTask(ctx, \"example_notebook\", \u0026dataplex.TaskArgs{\n\t\t\tTaskId: pulumi.String(\"tf-test-task_75125\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLake: exampleNotebook.Name,\n\t\t\tTriggerSpec: \u0026dataplex.TaskTriggerSpecArgs{\n\t\t\t\tType: pulumi.String(\"RECURRING\"),\n\t\t\t\tSchedule: pulumi.String(\"1 * * * *\"),\n\t\t\t},\n\t\t\tExecutionSpec: \u0026dataplex.TaskExecutionSpecArgs{\n\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"TASK_ARGS\": pulumi.String(\"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNotebook: \u0026dataplex.TaskNotebookArgs{\n\t\t\t\tNotebook: pulumi.String(\"gs://terraform-test/test-notebook.ipynb\"),\n\t\t\t\tInfrastructureSpec: \u0026dataplex.TaskNotebookInfrastructureSpecArgs{\n\t\t\t\t\tBatch: \u0026dataplex.TaskNotebookInfrastructureSpecBatchArgs{\n\t\t\t\t\t\tExecutorsCount: pulumi.Int(2),\n\t\t\t\t\t\tMaxExecutorsCount: pulumi.Int(100),\n\t\t\t\t\t},\n\t\t\t\t\tContainerImage: \u0026dataplex.TaskNotebookInfrastructureSpecContainerImageArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"test-image\"),\n\t\t\t\t\t\tJavaJars: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-java-jars.jar\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPythonPackages: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"gs://bucket-name/my/path/to/lib.tar.gz\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\t\t\"name\": pulumi.String(\"wrench\"),\n\t\t\t\t\t\t\t\"mass\": pulumi.String(\"1.3kg\"),\n\t\t\t\t\t\t\t\"count\": pulumi.String(\"3\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcNetwork: \u0026dataplex.TaskNotebookInfrastructureSpecVpcNetworkArgs{\n\t\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"test-network-tag\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tNetwork: _default.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://terraform-test/test.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.dataplex.Lake;\nimport com.pulumi.gcp.dataplex.LakeArgs;\nimport com.pulumi.gcp.dataplex.Task;\nimport com.pulumi.gcp.dataplex.TaskArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskTriggerSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskExecutionSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecBatchArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecContainerImageArgs;\nimport com.pulumi.gcp.dataplex.inputs.TaskNotebookInfrastructureSpecVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // VPC network\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"tf-test-workstation-cluster_34962\")\n .autoCreateSubnetworks(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var exampleNotebook = new Lake(\"exampleNotebook\", LakeArgs.builder()\n .name(\"tf-test-lake_74000\")\n .location(\"us-central1\")\n .project(\"my-project-name\")\n .build());\n\n var exampleNotebookTask = new Task(\"exampleNotebookTask\", TaskArgs.builder()\n .taskId(\"tf-test-task_75125\")\n .location(\"us-central1\")\n .lake(exampleNotebook.name())\n .triggerSpec(TaskTriggerSpecArgs.builder()\n .type(\"RECURRING\")\n .schedule(\"1 * * * *\")\n .build())\n .executionSpec(TaskExecutionSpecArgs.builder()\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .args(Map.of(\"TASK_ARGS\", \"--output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\"))\n .build())\n .notebook(TaskNotebookArgs.builder()\n .notebook(\"gs://terraform-test/test-notebook.ipynb\")\n .infrastructureSpec(TaskNotebookInfrastructureSpecArgs.builder()\n .batch(TaskNotebookInfrastructureSpecBatchArgs.builder()\n .executorsCount(2)\n .maxExecutorsCount(100)\n .build())\n .containerImage(TaskNotebookInfrastructureSpecContainerImageArgs.builder()\n .image(\"test-image\")\n .javaJars(\"test-java-jars.jar\")\n .pythonPackages(\"gs://bucket-name/my/path/to/lib.tar.gz\")\n .properties(Map.ofEntries(\n Map.entry(\"name\", \"wrench\"),\n Map.entry(\"mass\", \"1.3kg\"),\n Map.entry(\"count\", \"3\")\n ))\n .build())\n .vpcNetwork(TaskNotebookInfrastructureSpecVpcNetworkArgs.builder()\n .networkTags(\"test-network-tag\")\n .network(default_.id())\n .build())\n .build())\n .fileUris(\"gs://terraform-test/test.csv\")\n .archiveUris(\"gs://terraform-test/test.csv\")\n .build())\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # VPC network\n default:\n type: gcp:compute:Network\n properties:\n name: tf-test-workstation-cluster_34962\n autoCreateSubnetworks: true\n exampleNotebook:\n type: gcp:dataplex:Lake\n name: example_notebook\n properties:\n name: tf-test-lake_74000\n location: us-central1\n project: my-project-name\n exampleNotebookTask:\n type: gcp:dataplex:Task\n name: example_notebook\n properties:\n taskId: tf-test-task_75125\n location: us-central1\n lake: ${exampleNotebook.name}\n triggerSpec:\n type: RECURRING\n schedule: 1 * * * *\n executionSpec:\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n args:\n TASK_ARGS: --output_location,gs://spark-job-jars-anrajitha/task-result, --output_format, json\n notebook:\n notebook: gs://terraform-test/test-notebook.ipynb\n infrastructureSpec:\n batch:\n executorsCount: 2\n maxExecutorsCount: 100\n containerImage:\n image: test-image\n javaJars:\n - test-java-jars.jar\n pythonPackages:\n - gs://bucket-name/my/path/to/lib.tar.gz\n properties:\n name: wrench\n mass: 1.3kg\n count: '3'\n vpcNetwork:\n networkTags:\n - test-network-tag\n network: ${default.id}\n fileUris:\n - gs://terraform-test/test.csv\n archiveUris:\n - gs://terraform-test/test.csv\n project: my-project-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTask can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/lakes/{{lake}}/tasks/{{task_id}}`\n\n* `{{project}}/{{location}}/{{lake}}/{{task_id}}`\n\n* `{{location}}/{{lake}}/{{task_id}}`\n\nWhen using the `pulumi import` command, Task can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default projects/{{project}}/locations/{{location}}/lakes/{{lake}}/tasks/{{task_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default {{project}}/{{location}}/{{lake}}/{{task_id}}\n```\n\n```sh\n$ pulumi import gcp:dataplex/task:Task default {{location}}/{{lake}}/{{task_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -204499,7 +206003,7 @@ } }, "gcp:dataproc/batch:Batch": { - "description": "Dataproc Serverless Batches lets you run Spark workloads without requiring you to\nprovision and manage your own Dataproc cluster.\n\n\nTo get more information about Batch, see:\n\n* [API documentation](https://cloud.google.com/dataproc-serverless/docs/reference/rest/v1/projects.locations.batches)\n* How-to Guides\n * [Dataproc Serverless Batches Intro](https://cloud.google.com/dataproc-serverless/docs/overview)\n\n## Example Usage\n\n### Dataproc Batch Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"tf-test-batch_75125\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"tf-test-batch_75125\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"tf-test-batch_75125\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_75125\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_75125\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: tf-test-batch_75125\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Spark Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n uniformBucketLevelAccess: true,\n name: \"dataproc-bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst cryptoKeyMember1 = new gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\", {\n cryptoKeyId: \"example-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com`),\n});\nconst ms = new gcp.dataproc.MetastoreService(\"ms\", {\n serviceId: \"dataproc-batch\",\n location: \"us-central1\",\n port: 9080,\n tier: \"DEVELOPER\",\n maintenanceWindow: {\n hourOfDay: 2,\n dayOfWeek: \"SUNDAY\",\n },\n hiveMetastoreConfig: {\n version: \"3.1.2\",\n },\n});\nconst basic = new gcp.dataproc.Cluster(\"basic\", {\n name: \"dataproc-batch\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": pulumi.interpolate`gs://${bucket.name}/*/spark-job-history`,\n },\n },\n endpointConfig: {\n enableHttpPortAccess: true,\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n metastoreConfig: {\n dataprocMetastoreService: ms.name,\n },\n },\n});\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"dataproc-batch\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n version: \"2.2\",\n },\n environmentConfig: {\n executionConfig: {\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n kmsKey: \"example-key\",\n networkUri: \"default\",\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n stagingBucket: bucket.name,\n },\n peripheralsConfig: {\n metastoreService: ms.name,\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n}, {\n dependsOn: [cryptoKeyMember1],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ngcs_account = gcp.storage.get_project_service_account()\nbucket = gcp.storage.Bucket(\"bucket\",\n uniform_bucket_level_access=True,\n name=\"dataproc-bucket\",\n location=\"US\",\n force_destroy=True)\ncrypto_key_member1 = gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\",\n crypto_key_id=\"example-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@dataproc-accounts.iam.gserviceaccount.com\")\nms = gcp.dataproc.MetastoreService(\"ms\",\n service_id=\"dataproc-batch\",\n location=\"us-central1\",\n port=9080,\n tier=\"DEVELOPER\",\n maintenance_window={\n \"hour_of_day\": 2,\n \"day_of_week\": \"SUNDAY\",\n },\n hive_metastore_config={\n \"version\": \"3.1.2\",\n })\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"dataproc-batch\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": bucket.name.apply(lambda name: f\"gs://{name}/*/spark-job-history\"),\n },\n },\n \"endpoint_config\": {\n \"enable_http_port_access\": True,\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n \"metastore_config\": {\n \"dataproc_metastore_service\": ms.name,\n },\n })\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"dataproc-batch\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"version\": \"2.2\",\n },\n environment_config={\n \"execution_config\": {\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n \"kms_key\": \"example-key\",\n \"network_uri\": \"default\",\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"staging_bucket\": bucket.name,\n },\n \"peripherals_config\": {\n \"metastore_service\": ms.name,\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n opts = pulumi.ResourceOptions(depends_on=[crypto_key_member1]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n UniformBucketLevelAccess = true,\n Name = \"dataproc-bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var cryptoKeyMember1 = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key_member_1\", new()\n {\n CryptoKeyId = \"example-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@dataproc-accounts.iam.gserviceaccount.com\",\n });\n\n var ms = new Gcp.Dataproc.MetastoreService(\"ms\", new()\n {\n ServiceId = \"dataproc-batch\",\n Location = \"us-central1\",\n Port = 9080,\n Tier = \"DEVELOPER\",\n MaintenanceWindow = new Gcp.Dataproc.Inputs.MetastoreServiceMaintenanceWindowArgs\n {\n HourOfDay = 2,\n DayOfWeek = \"SUNDAY\",\n },\n HiveMetastoreConfig = new Gcp.Dataproc.Inputs.MetastoreServiceHiveMetastoreConfigArgs\n {\n Version = \"3.1.2\",\n },\n });\n\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"dataproc-batch\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n { \"spark:spark.history.fs.logDirectory\", bucket.Name.Apply(name =\u003e $\"gs://{name}/*/spark-job-history\") },\n },\n },\n EndpointConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigEndpointConfigArgs\n {\n EnableHttpPortAccess = true,\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n MetastoreConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMetastoreConfigArgs\n {\n DataprocMetastoreService = ms.Name,\n },\n },\n });\n\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"dataproc-batch\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Version = \"2.2\",\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n KmsKey = \"example-key\",\n NetworkUri = \"default\",\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n StagingBucket = bucket.Name,\n },\n PeripheralsConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigArgs\n {\n MetastoreService = ms.Name,\n SparkHistoryServerConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKeyMember1,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.GetProjectServiceAccount(ctx, \u0026storage.GetProjectServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tName: pulumi.String(\"dataproc-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyMember1, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key_member_1\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"example-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@dataproc-accounts.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tms, err := dataproc.NewMetastoreService(ctx, \"ms\", \u0026dataproc.MetastoreServiceArgs{\n\t\t\tServiceId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPort: pulumi.Int(9080),\n\t\t\tTier: pulumi.String(\"DEVELOPER\"),\n\t\t\tMaintenanceWindow: \u0026dataproc.MetastoreServiceMaintenanceWindowArgs{\n\t\t\t\tHourOfDay: pulumi.Int(2),\n\t\t\t\tDayOfWeek: pulumi.String(\"SUNDAY\"),\n\t\t\t},\n\t\t\tHiveMetastoreConfig: \u0026dataproc.MetastoreServiceHiveMetastoreConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"3.1.2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"dataproc-batch\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"spark:spark.history.fs.logDirectory\": bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/*/spark-job-history\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEndpointConfig: \u0026dataproc.ClusterClusterConfigEndpointConfigArgs{\n\t\t\t\t\tEnableHttpPortAccess: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetastoreConfig: \u0026dataproc.ClusterClusterConfigMetastoreConfigArgs{\n\t\t\t\t\tDataprocMetastoreService: ms.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t\tKmsKey: pulumi.String(\"example-key\"),\n\t\t\t\t\tNetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\t\tStagingBucket: bucket.Name,\n\t\t\t\t},\n\t\t\t\tPeripheralsConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigArgs{\n\t\t\t\t\tMetastoreService: ms.Name,\n\t\t\t\t\tSparkHistoryServerConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs{\n\t\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyMember1,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.dataproc.MetastoreService;\nimport com.pulumi.gcp.dataproc.MetastoreServiceArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceMaintenanceWindowArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceHiveMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigEndpointConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n final var gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .uniformBucketLevelAccess(true)\n .name(\"dataproc-bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var cryptoKeyMember1 = new CryptoKeyIAMMember(\"cryptoKeyMember1\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"example-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@dataproc-accounts.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var ms = new MetastoreService(\"ms\", MetastoreServiceArgs.builder()\n .serviceId(\"dataproc-batch\")\n .location(\"us-central1\")\n .port(9080)\n .tier(\"DEVELOPER\")\n .maintenanceWindow(MetastoreServiceMaintenanceWindowArgs.builder()\n .hourOfDay(2)\n .dayOfWeek(\"SUNDAY\")\n .build())\n .hiveMetastoreConfig(MetastoreServiceHiveMetastoreConfigArgs.builder()\n .version(\"3.1.2\")\n .build())\n .build());\n\n var basic = new Cluster(\"basic\", ClusterArgs.builder()\n .name(\"dataproc-batch\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.ofEntries(\n Map.entry(\"dataproc:dataproc.allow.zero.workers\", \"true\"),\n Map.entry(\"spark:spark.history.fs.logDirectory\", bucket.name().applyValue(name -\u003e String.format(\"gs://%s/*/spark-job-history\", name)))\n ))\n .build())\n .endpointConfig(ClusterClusterConfigEndpointConfigArgs.builder()\n .enableHttpPortAccess(true)\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .metastoreConfig(ClusterClusterConfigMetastoreConfigArgs.builder()\n .dataprocMetastoreService(ms.name())\n .build())\n .build())\n .build());\n\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"dataproc-batch\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .version(\"2.2\")\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .kmsKey(\"example-key\")\n .networkUri(\"default\")\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .stagingBucket(bucket.name())\n .build())\n .peripheralsConfig(BatchEnvironmentConfigPeripheralsConfigArgs.builder()\n .metastoreService(ms.name())\n .sparkHistoryServerConfig(BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyMember1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: dataproc-batch\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n version: '2.2'\n environmentConfig:\n executionConfig:\n ttl: 3600s\n networkTags:\n - tag1\n kmsKey: example-key\n networkUri: default\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n stagingBucket: ${bucket.name}\n peripheralsConfig:\n metastoreService: ${ms.name}\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n options:\n dependsOn:\n - ${cryptoKeyMember1}\n bucket:\n type: gcp:storage:Bucket\n properties:\n uniformBucketLevelAccess: true\n name: dataproc-bucket\n location: US\n forceDestroy: true\n cryptoKeyMember1:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key_member_1\n properties:\n cryptoKeyId: example-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: dataproc-batch\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n spark:spark.history.fs.logDirectory: gs://${bucket.name}/*/spark-job-history\n endpointConfig:\n enableHttpPortAccess: true\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n metastoreConfig:\n dataprocMetastoreService: ${ms.name}\n ms:\n type: gcp:dataproc:MetastoreService\n properties:\n serviceId: dataproc-batch\n location: us-central1\n port: 9080\n tier: DEVELOPER\n maintenanceWindow:\n hourOfDay: 2\n dayOfWeek: SUNDAY\n hiveMetastoreConfig:\n version: 3.1.2\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n gcsAccount:\n fn::invoke:\n function: gcp:storage:getProjectServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparksql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparsql = new gcp.dataproc.Batch(\"example_batch_sparsql\", {\n batchId: \"tf-test-batch_88722\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n sparkSqlBatch: {\n queryFileUri: \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n queryVariables: {\n name: \"value\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparsql = gcp.dataproc.Batch(\"example_batch_sparsql\",\n batch_id=\"tf-test-batch_88722\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n spark_sql_batch={\n \"query_file_uri\": \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"query_variables\": {\n \"name\": \"value\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparsql = new Gcp.Dataproc.Batch(\"example_batch_sparsql\", new()\n {\n BatchId = \"tf-test-batch_88722\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n SparkSqlBatch = new Gcp.Dataproc.Inputs.BatchSparkSqlBatchArgs\n {\n QueryFileUri = \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n QueryVariables = \n {\n { \"name\", \"value\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparsql\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_88722\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkSqlBatch: \u0026dataproc.BatchSparkSqlBatchArgs{\n\t\t\t\tQueryFileUri: pulumi.String(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\"),\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tQueryVariables: pulumi.StringMap{\n\t\t\t\t\t\"name\": pulumi.String(\"value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkSqlBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparsql = new Batch(\"exampleBatchSparsql\", BatchArgs.builder()\n .batchId(\"tf-test-batch_88722\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .sparkSqlBatch(BatchSparkSqlBatchArgs.builder()\n .queryFileUri(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .queryVariables(Map.of(\"name\", \"value\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparsql:\n type: gcp:dataproc:Batch\n name: example_batch_sparsql\n properties:\n batchId: tf-test-batch_88722\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n sparkSqlBatch:\n queryFileUri: gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n queryVariables:\n name: value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchPyspark = new gcp.dataproc.Batch(\"example_batch_pyspark\", {\n batchId: \"tf-test-batch_39249\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n pysparkBatch: {\n mainPythonFileUri: \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n pythonFileUris: [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n archiveUris: [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n fileUris: [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_pyspark = gcp.dataproc.Batch(\"example_batch_pyspark\",\n batch_id=\"tf-test-batch_39249\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n pyspark_batch={\n \"main_python_file_uri\": \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"python_file_uris\": [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n \"archive_uris\": [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n \"file_uris\": [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchPyspark = new Gcp.Dataproc.Batch(\"example_batch_pyspark\", new()\n {\n BatchId = \"tf-test-batch_39249\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n PysparkBatch = new Gcp.Dataproc.Inputs.BatchPysparkBatchArgs\n {\n MainPythonFileUri = \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n PythonFileUris = new[]\n {\n \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n ArchiveUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n },\n FileUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/people.txt\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_pyspark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_39249\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPysparkBatch: \u0026dataproc.BatchPysparkBatchArgs{\n\t\t\t\tMainPythonFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/test_util.py\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tPythonFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.jar\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/people.txt\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchPysparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchPyspark = new Batch(\"exampleBatchPyspark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_39249\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .pysparkBatch(BatchPysparkBatchArgs.builder()\n .mainPythonFileUri(\"https://storage.googleapis.com/terraform-batches/test_util.py\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .pythonFileUris(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .archiveUris( \n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\")\n .fileUris(\"https://storage.googleapis.com/terraform-batches/people.txt\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchPyspark:\n type: gcp:dataproc:Batch\n name: example_batch_pyspark\n properties:\n batchId: tf-test-batch_39249\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n pysparkBatch:\n mainPythonFileUri: https://storage.googleapis.com/terraform-batches/test_util.py\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n pythonFileUris:\n - gs://dataproc-examples/pyspark/hello-world/hello-world.py\n archiveUris:\n - https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\n - https://storage.googleapis.com/terraform-batches/animals.txt.jar\n - https://storage.googleapis.com/terraform-batches/animals.txt\n fileUris:\n - https://storage.googleapis.com/terraform-batches/people.txt\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparkr\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparkr = new gcp.dataproc.Batch(\"example_batch_sparkr\", {\n batchId: \"tf-test-batch_74391\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkRBatch: {\n mainRFileUri: \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n args: [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparkr = gcp.dataproc.Batch(\"example_batch_sparkr\",\n batch_id=\"tf-test-batch_74391\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_r_batch={\n \"main_r_file_uri\": \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n \"args\": [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparkr = new Gcp.Dataproc.Batch(\"example_batch_sparkr\", new()\n {\n BatchId = \"tf-test-batch_74391\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkRBatch = new Gcp.Dataproc.Inputs.BatchSparkRBatchArgs\n {\n MainRFileUri = \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n Args = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/flights.csv\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparkr\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_74391\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkRBatch: \u0026dataproc.BatchSparkRBatchArgs{\n\t\t\t\tMainRFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/flights.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkRBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparkr = new Batch(\"exampleBatchSparkr\", BatchArgs.builder()\n .batchId(\"tf-test-batch_74391\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkRBatch(BatchSparkRBatchArgs.builder()\n .mainRFileUri(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\")\n .args(\"https://storage.googleapis.com/terraform-batches/flights.csv\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparkr:\n type: gcp:dataproc:Batch\n name: example_batch_sparkr\n properties:\n batchId: tf-test-batch_74391\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkRBatch:\n mainRFileUri: https://storage.googleapis.com/terraform-batches/spark-r-flights.r\n args:\n - https://storage.googleapis.com/terraform-batches/flights.csv\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Autotuning\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchAutotuning = new gcp.dataproc.Batch(\"example_batch_autotuning\", {\n batchId: \"tf-test-batch_16511\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n version: \"2.2\",\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n cohort: \"tf-dataproc-batch-example\",\n autotuningConfig: {\n scenarios: [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_autotuning = gcp.dataproc.Batch(\"example_batch_autotuning\",\n batch_id=\"tf-test-batch_16511\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"version\": \"2.2\",\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"cohort\": \"tf-dataproc-batch-example\",\n \"autotuning_config\": {\n \"scenarios\": [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchAutotuning = new Gcp.Dataproc.Batch(\"example_batch_autotuning\", new()\n {\n BatchId = \"tf-test-batch_16511\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Version = \"2.2\",\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Cohort = \"tf-dataproc-batch-example\",\n AutotuningConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigAutotuningConfigArgs\n {\n Scenarios = new[]\n {\n \"SCALING\",\n \"MEMORY\",\n },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_autotuning\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_16511\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tCohort: pulumi.String(\"tf-dataproc-batch-example\"),\n\t\t\t\tAutotuningConfig: \u0026dataproc.BatchRuntimeConfigAutotuningConfigArgs{\n\t\t\t\t\tScenarios: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"SCALING\"),\n\t\t\t\t\t\tpulumi.String(\"MEMORY\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigAutotuningConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchAutotuning = new Batch(\"exampleBatchAutotuning\", BatchArgs.builder()\n .batchId(\"tf-test-batch_16511\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .version(\"2.2\")\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .cohort(\"tf-dataproc-batch-example\")\n .autotuningConfig(BatchRuntimeConfigAutotuningConfigArgs.builder()\n .scenarios( \n \"SCALING\",\n \"MEMORY\")\n .build())\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchAutotuning:\n type: gcp:dataproc:Batch\n name: example_batch_autotuning\n properties:\n batchId: tf-test-batch_16511\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n version: '2.2'\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n cohort: tf-dataproc-batch-example\n autotuningConfig:\n scenarios:\n - SCALING\n - MEMORY\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBatch can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/batches/{{batch_id}}`\n\n* `{{project}}/{{location}}/{{batch_id}}`\n\n* `{{location}}/{{batch_id}}`\n\nWhen using the `pulumi import` command, Batch can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default projects/{{project}}/locations/{{location}}/batches/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{project}}/{{location}}/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{location}}/{{batch_id}}\n```\n\n", + "description": "Dataproc Serverless Batches lets you run Spark workloads without requiring you to\nprovision and manage your own Dataproc cluster.\n\n\nTo get more information about Batch, see:\n\n* [API documentation](https://cloud.google.com/dataproc-serverless/docs/reference/rest/v1/projects.locations.batches)\n* How-to Guides\n * [Dataproc Serverless Batches Intro](https://cloud.google.com/dataproc-serverless/docs/overview)\n\n## Example Usage\n\n### Dataproc Batch Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"tf-test-batch_88722\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"tf-test-batch_88722\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"tf-test-batch_88722\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_88722\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_88722\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: tf-test-batch_88722\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Spark Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n uniformBucketLevelAccess: true,\n name: \"dataproc-bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst cryptoKeyMember1 = new gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\", {\n cryptoKeyId: \"example-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com`),\n});\nconst ms = new gcp.dataproc.MetastoreService(\"ms\", {\n serviceId: \"dataproc-batch\",\n location: \"us-central1\",\n port: 9080,\n tier: \"DEVELOPER\",\n maintenanceWindow: {\n hourOfDay: 2,\n dayOfWeek: \"SUNDAY\",\n },\n hiveMetastoreConfig: {\n version: \"3.1.2\",\n },\n});\nconst basic = new gcp.dataproc.Cluster(\"basic\", {\n name: \"dataproc-batch\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": pulumi.interpolate`gs://${bucket.name}/*/spark-job-history`,\n },\n },\n endpointConfig: {\n enableHttpPortAccess: true,\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n metastoreConfig: {\n dataprocMetastoreService: ms.name,\n },\n },\n});\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"dataproc-batch\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n version: \"2.2\",\n },\n environmentConfig: {\n executionConfig: {\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n kmsKey: \"example-key\",\n networkUri: \"default\",\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n stagingBucket: bucket.name,\n },\n peripheralsConfig: {\n metastoreService: ms.name,\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n}, {\n dependsOn: [cryptoKeyMember1],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ngcs_account = gcp.storage.get_project_service_account()\nbucket = gcp.storage.Bucket(\"bucket\",\n uniform_bucket_level_access=True,\n name=\"dataproc-bucket\",\n location=\"US\",\n force_destroy=True)\ncrypto_key_member1 = gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\",\n crypto_key_id=\"example-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@dataproc-accounts.iam.gserviceaccount.com\")\nms = gcp.dataproc.MetastoreService(\"ms\",\n service_id=\"dataproc-batch\",\n location=\"us-central1\",\n port=9080,\n tier=\"DEVELOPER\",\n maintenance_window={\n \"hour_of_day\": 2,\n \"day_of_week\": \"SUNDAY\",\n },\n hive_metastore_config={\n \"version\": \"3.1.2\",\n })\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"dataproc-batch\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": bucket.name.apply(lambda name: f\"gs://{name}/*/spark-job-history\"),\n },\n },\n \"endpoint_config\": {\n \"enable_http_port_access\": True,\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n \"metastore_config\": {\n \"dataproc_metastore_service\": ms.name,\n },\n })\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"dataproc-batch\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"version\": \"2.2\",\n },\n environment_config={\n \"execution_config\": {\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n \"kms_key\": \"example-key\",\n \"network_uri\": \"default\",\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"staging_bucket\": bucket.name,\n },\n \"peripherals_config\": {\n \"metastore_service\": ms.name,\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n opts = pulumi.ResourceOptions(depends_on=[crypto_key_member1]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n UniformBucketLevelAccess = true,\n Name = \"dataproc-bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var cryptoKeyMember1 = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key_member_1\", new()\n {\n CryptoKeyId = \"example-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@dataproc-accounts.iam.gserviceaccount.com\",\n });\n\n var ms = new Gcp.Dataproc.MetastoreService(\"ms\", new()\n {\n ServiceId = \"dataproc-batch\",\n Location = \"us-central1\",\n Port = 9080,\n Tier = \"DEVELOPER\",\n MaintenanceWindow = new Gcp.Dataproc.Inputs.MetastoreServiceMaintenanceWindowArgs\n {\n HourOfDay = 2,\n DayOfWeek = \"SUNDAY\",\n },\n HiveMetastoreConfig = new Gcp.Dataproc.Inputs.MetastoreServiceHiveMetastoreConfigArgs\n {\n Version = \"3.1.2\",\n },\n });\n\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"dataproc-batch\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n { \"spark:spark.history.fs.logDirectory\", bucket.Name.Apply(name =\u003e $\"gs://{name}/*/spark-job-history\") },\n },\n },\n EndpointConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigEndpointConfigArgs\n {\n EnableHttpPortAccess = true,\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n MetastoreConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMetastoreConfigArgs\n {\n DataprocMetastoreService = ms.Name,\n },\n },\n });\n\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"dataproc-batch\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Version = \"2.2\",\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n KmsKey = \"example-key\",\n NetworkUri = \"default\",\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n StagingBucket = bucket.Name,\n },\n PeripheralsConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigArgs\n {\n MetastoreService = ms.Name,\n SparkHistoryServerConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKeyMember1,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.GetProjectServiceAccount(ctx, \u0026storage.GetProjectServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tName: pulumi.String(\"dataproc-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyMember1, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key_member_1\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"example-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@dataproc-accounts.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tms, err := dataproc.NewMetastoreService(ctx, \"ms\", \u0026dataproc.MetastoreServiceArgs{\n\t\t\tServiceId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPort: pulumi.Int(9080),\n\t\t\tTier: pulumi.String(\"DEVELOPER\"),\n\t\t\tMaintenanceWindow: \u0026dataproc.MetastoreServiceMaintenanceWindowArgs{\n\t\t\t\tHourOfDay: pulumi.Int(2),\n\t\t\t\tDayOfWeek: pulumi.String(\"SUNDAY\"),\n\t\t\t},\n\t\t\tHiveMetastoreConfig: \u0026dataproc.MetastoreServiceHiveMetastoreConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"3.1.2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"dataproc-batch\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"spark:spark.history.fs.logDirectory\": bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/*/spark-job-history\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEndpointConfig: \u0026dataproc.ClusterClusterConfigEndpointConfigArgs{\n\t\t\t\t\tEnableHttpPortAccess: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetastoreConfig: \u0026dataproc.ClusterClusterConfigMetastoreConfigArgs{\n\t\t\t\t\tDataprocMetastoreService: ms.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t\tKmsKey: pulumi.String(\"example-key\"),\n\t\t\t\t\tNetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\t\tStagingBucket: bucket.Name,\n\t\t\t\t},\n\t\t\t\tPeripheralsConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigArgs{\n\t\t\t\t\tMetastoreService: ms.Name,\n\t\t\t\t\tSparkHistoryServerConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs{\n\t\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyMember1,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.dataproc.MetastoreService;\nimport com.pulumi.gcp.dataproc.MetastoreServiceArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceMaintenanceWindowArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceHiveMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigEndpointConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n final var gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .uniformBucketLevelAccess(true)\n .name(\"dataproc-bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var cryptoKeyMember1 = new CryptoKeyIAMMember(\"cryptoKeyMember1\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"example-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@dataproc-accounts.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var ms = new MetastoreService(\"ms\", MetastoreServiceArgs.builder()\n .serviceId(\"dataproc-batch\")\n .location(\"us-central1\")\n .port(9080)\n .tier(\"DEVELOPER\")\n .maintenanceWindow(MetastoreServiceMaintenanceWindowArgs.builder()\n .hourOfDay(2)\n .dayOfWeek(\"SUNDAY\")\n .build())\n .hiveMetastoreConfig(MetastoreServiceHiveMetastoreConfigArgs.builder()\n .version(\"3.1.2\")\n .build())\n .build());\n\n var basic = new Cluster(\"basic\", ClusterArgs.builder()\n .name(\"dataproc-batch\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.ofEntries(\n Map.entry(\"dataproc:dataproc.allow.zero.workers\", \"true\"),\n Map.entry(\"spark:spark.history.fs.logDirectory\", bucket.name().applyValue(name -\u003e String.format(\"gs://%s/*/spark-job-history\", name)))\n ))\n .build())\n .endpointConfig(ClusterClusterConfigEndpointConfigArgs.builder()\n .enableHttpPortAccess(true)\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .metastoreConfig(ClusterClusterConfigMetastoreConfigArgs.builder()\n .dataprocMetastoreService(ms.name())\n .build())\n .build())\n .build());\n\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"dataproc-batch\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .version(\"2.2\")\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .kmsKey(\"example-key\")\n .networkUri(\"default\")\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .stagingBucket(bucket.name())\n .build())\n .peripheralsConfig(BatchEnvironmentConfigPeripheralsConfigArgs.builder()\n .metastoreService(ms.name())\n .sparkHistoryServerConfig(BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyMember1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: dataproc-batch\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n version: '2.2'\n environmentConfig:\n executionConfig:\n ttl: 3600s\n networkTags:\n - tag1\n kmsKey: example-key\n networkUri: default\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n stagingBucket: ${bucket.name}\n peripheralsConfig:\n metastoreService: ${ms.name}\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n options:\n dependsOn:\n - ${cryptoKeyMember1}\n bucket:\n type: gcp:storage:Bucket\n properties:\n uniformBucketLevelAccess: true\n name: dataproc-bucket\n location: US\n forceDestroy: true\n cryptoKeyMember1:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key_member_1\n properties:\n cryptoKeyId: example-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: dataproc-batch\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n spark:spark.history.fs.logDirectory: gs://${bucket.name}/*/spark-job-history\n endpointConfig:\n enableHttpPortAccess: true\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n metastoreConfig:\n dataprocMetastoreService: ${ms.name}\n ms:\n type: gcp:dataproc:MetastoreService\n properties:\n serviceId: dataproc-batch\n location: us-central1\n port: 9080\n tier: DEVELOPER\n maintenanceWindow:\n hourOfDay: 2\n dayOfWeek: SUNDAY\n hiveMetastoreConfig:\n version: 3.1.2\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n gcsAccount:\n fn::invoke:\n function: gcp:storage:getProjectServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparksql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparsql = new gcp.dataproc.Batch(\"example_batch_sparsql\", {\n batchId: \"tf-test-batch_39249\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n sparkSqlBatch: {\n queryFileUri: \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n queryVariables: {\n name: \"value\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparsql = gcp.dataproc.Batch(\"example_batch_sparsql\",\n batch_id=\"tf-test-batch_39249\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n spark_sql_batch={\n \"query_file_uri\": \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"query_variables\": {\n \"name\": \"value\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparsql = new Gcp.Dataproc.Batch(\"example_batch_sparsql\", new()\n {\n BatchId = \"tf-test-batch_39249\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n SparkSqlBatch = new Gcp.Dataproc.Inputs.BatchSparkSqlBatchArgs\n {\n QueryFileUri = \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n QueryVariables = \n {\n { \"name\", \"value\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparsql\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_39249\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkSqlBatch: \u0026dataproc.BatchSparkSqlBatchArgs{\n\t\t\t\tQueryFileUri: pulumi.String(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\"),\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tQueryVariables: pulumi.StringMap{\n\t\t\t\t\t\"name\": pulumi.String(\"value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkSqlBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparsql = new Batch(\"exampleBatchSparsql\", BatchArgs.builder()\n .batchId(\"tf-test-batch_39249\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .sparkSqlBatch(BatchSparkSqlBatchArgs.builder()\n .queryFileUri(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .queryVariables(Map.of(\"name\", \"value\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparsql:\n type: gcp:dataproc:Batch\n name: example_batch_sparsql\n properties:\n batchId: tf-test-batch_39249\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n sparkSqlBatch:\n queryFileUri: gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n queryVariables:\n name: value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchPyspark = new gcp.dataproc.Batch(\"example_batch_pyspark\", {\n batchId: \"tf-test-batch_74391\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n pysparkBatch: {\n mainPythonFileUri: \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n pythonFileUris: [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n archiveUris: [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n fileUris: [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_pyspark = gcp.dataproc.Batch(\"example_batch_pyspark\",\n batch_id=\"tf-test-batch_74391\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n pyspark_batch={\n \"main_python_file_uri\": \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"python_file_uris\": [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n \"archive_uris\": [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n \"file_uris\": [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchPyspark = new Gcp.Dataproc.Batch(\"example_batch_pyspark\", new()\n {\n BatchId = \"tf-test-batch_74391\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n PysparkBatch = new Gcp.Dataproc.Inputs.BatchPysparkBatchArgs\n {\n MainPythonFileUri = \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n PythonFileUris = new[]\n {\n \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n ArchiveUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n },\n FileUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/people.txt\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_pyspark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_74391\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPysparkBatch: \u0026dataproc.BatchPysparkBatchArgs{\n\t\t\t\tMainPythonFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/test_util.py\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tPythonFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.jar\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/people.txt\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchPysparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchPyspark = new Batch(\"exampleBatchPyspark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_74391\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .pysparkBatch(BatchPysparkBatchArgs.builder()\n .mainPythonFileUri(\"https://storage.googleapis.com/terraform-batches/test_util.py\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .pythonFileUris(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .archiveUris( \n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\")\n .fileUris(\"https://storage.googleapis.com/terraform-batches/people.txt\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchPyspark:\n type: gcp:dataproc:Batch\n name: example_batch_pyspark\n properties:\n batchId: tf-test-batch_74391\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n pysparkBatch:\n mainPythonFileUri: https://storage.googleapis.com/terraform-batches/test_util.py\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n pythonFileUris:\n - gs://dataproc-examples/pyspark/hello-world/hello-world.py\n archiveUris:\n - https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\n - https://storage.googleapis.com/terraform-batches/animals.txt.jar\n - https://storage.googleapis.com/terraform-batches/animals.txt\n fileUris:\n - https://storage.googleapis.com/terraform-batches/people.txt\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparkr\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparkr = new gcp.dataproc.Batch(\"example_batch_sparkr\", {\n batchId: \"tf-test-batch_16511\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkRBatch: {\n mainRFileUri: \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n args: [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparkr = gcp.dataproc.Batch(\"example_batch_sparkr\",\n batch_id=\"tf-test-batch_16511\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_r_batch={\n \"main_r_file_uri\": \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n \"args\": [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparkr = new Gcp.Dataproc.Batch(\"example_batch_sparkr\", new()\n {\n BatchId = \"tf-test-batch_16511\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkRBatch = new Gcp.Dataproc.Inputs.BatchSparkRBatchArgs\n {\n MainRFileUri = \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n Args = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/flights.csv\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparkr\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_16511\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkRBatch: \u0026dataproc.BatchSparkRBatchArgs{\n\t\t\t\tMainRFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/flights.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkRBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparkr = new Batch(\"exampleBatchSparkr\", BatchArgs.builder()\n .batchId(\"tf-test-batch_16511\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkRBatch(BatchSparkRBatchArgs.builder()\n .mainRFileUri(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\")\n .args(\"https://storage.googleapis.com/terraform-batches/flights.csv\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparkr:\n type: gcp:dataproc:Batch\n name: example_batch_sparkr\n properties:\n batchId: tf-test-batch_16511\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkRBatch:\n mainRFileUri: https://storage.googleapis.com/terraform-batches/spark-r-flights.r\n args:\n - https://storage.googleapis.com/terraform-batches/flights.csv\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Autotuning\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchAutotuning = new gcp.dataproc.Batch(\"example_batch_autotuning\", {\n batchId: \"tf-test-batch_8493\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n version: \"2.2\",\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n cohort: \"tf-dataproc-batch-example\",\n autotuningConfig: {\n scenarios: [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_autotuning = gcp.dataproc.Batch(\"example_batch_autotuning\",\n batch_id=\"tf-test-batch_8493\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"version\": \"2.2\",\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"cohort\": \"tf-dataproc-batch-example\",\n \"autotuning_config\": {\n \"scenarios\": [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchAutotuning = new Gcp.Dataproc.Batch(\"example_batch_autotuning\", new()\n {\n BatchId = \"tf-test-batch_8493\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Version = \"2.2\",\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Cohort = \"tf-dataproc-batch-example\",\n AutotuningConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigAutotuningConfigArgs\n {\n Scenarios = new[]\n {\n \"SCALING\",\n \"MEMORY\",\n },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_autotuning\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_8493\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tCohort: pulumi.String(\"tf-dataproc-batch-example\"),\n\t\t\t\tAutotuningConfig: \u0026dataproc.BatchRuntimeConfigAutotuningConfigArgs{\n\t\t\t\t\tScenarios: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"SCALING\"),\n\t\t\t\t\t\tpulumi.String(\"MEMORY\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigAutotuningConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchAutotuning = new Batch(\"exampleBatchAutotuning\", BatchArgs.builder()\n .batchId(\"tf-test-batch_8493\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .version(\"2.2\")\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .cohort(\"tf-dataproc-batch-example\")\n .autotuningConfig(BatchRuntimeConfigAutotuningConfigArgs.builder()\n .scenarios( \n \"SCALING\",\n \"MEMORY\")\n .build())\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchAutotuning:\n type: gcp:dataproc:Batch\n name: example_batch_autotuning\n properties:\n batchId: tf-test-batch_8493\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n version: '2.2'\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n cohort: tf-dataproc-batch-example\n autotuningConfig:\n scenarios:\n - SCALING\n - MEMORY\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBatch can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/batches/{{batch_id}}`\n\n* `{{project}}/{{location}}/{{batch_id}}`\n\n* `{{location}}/{{batch_id}}`\n\nWhen using the `pulumi import` command, Batch can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default projects/{{project}}/locations/{{location}}/batches/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{project}}/{{location}}/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{location}}/{{batch_id}}\n```\n\n", "properties": { "batchId": { "type": "string", @@ -212081,8 +213585,12 @@ } }, "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 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/v8/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/v8/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: \u0026discoveryengine.DataStoreDocumentProcessingConfigDefaultParsingConfigDigitalParsingConfigArgs{},\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/v8/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/v8/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: \u0026discoveryengine.DataStoreDocumentProcessingConfigDefaultParsingConfigDigitalParsingConfigArgs{},\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### Discoveryengine Datastore Advanced Site Search Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst advancedSiteSearchConfig = new gcp.discoveryengine.DataStore(\"advanced_site_search_config\", {\n location: \"global\",\n dataStoreId: \"data-store-id\",\n displayName: \"tf-test-advanced-site-search-config-datastore\",\n industryVertical: \"GENERIC\",\n contentConfig: \"PUBLIC_WEBSITE\",\n solutionTypes: [\"SOLUTION_TYPE_CHAT\"],\n createAdvancedSiteSearch: true,\n skipDefaultSchemaCreation: false,\n advancedSiteSearchConfig: {\n disableInitialIndex: true,\n disableAutomaticRefresh: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadvanced_site_search_config = gcp.discoveryengine.DataStore(\"advanced_site_search_config\",\n location=\"global\",\n data_store_id=\"data-store-id\",\n display_name=\"tf-test-advanced-site-search-config-datastore\",\n industry_vertical=\"GENERIC\",\n content_config=\"PUBLIC_WEBSITE\",\n solution_types=[\"SOLUTION_TYPE_CHAT\"],\n create_advanced_site_search=True,\n skip_default_schema_creation=False,\n advanced_site_search_config={\n \"disable_initial_index\": True,\n \"disable_automatic_refresh\": 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 advancedSiteSearchConfig = new Gcp.DiscoveryEngine.DataStore(\"advanced_site_search_config\", new()\n {\n Location = \"global\",\n DataStoreId = \"data-store-id\",\n DisplayName = \"tf-test-advanced-site-search-config-datastore\",\n IndustryVertical = \"GENERIC\",\n ContentConfig = \"PUBLIC_WEBSITE\",\n SolutionTypes = new[]\n {\n \"SOLUTION_TYPE_CHAT\",\n },\n CreateAdvancedSiteSearch = true,\n SkipDefaultSchemaCreation = false,\n AdvancedSiteSearchConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreAdvancedSiteSearchConfigArgs\n {\n DisableInitialIndex = true,\n DisableAutomaticRefresh = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/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, \"advanced_site_search_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-advanced-site-search-config-datastore\"),\n\t\t\tIndustryVertical: pulumi.String(\"GENERIC\"),\n\t\t\tContentConfig: pulumi.String(\"PUBLIC_WEBSITE\"),\n\t\t\tSolutionTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SOLUTION_TYPE_CHAT\"),\n\t\t\t},\n\t\t\tCreateAdvancedSiteSearch: pulumi.Bool(true),\n\t\t\tSkipDefaultSchemaCreation: pulumi.Bool(false),\n\t\t\tAdvancedSiteSearchConfig: \u0026discoveryengine.DataStoreAdvancedSiteSearchConfigArgs{\n\t\t\t\tDisableInitialIndex: pulumi.Bool(true),\n\t\t\t\tDisableAutomaticRefresh: 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.discoveryengine.DataStore;\nimport com.pulumi.gcp.discoveryengine.DataStoreArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreAdvancedSiteSearchConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var advancedSiteSearchConfig = new DataStore(\"advancedSiteSearchConfig\", DataStoreArgs.builder()\n .location(\"global\")\n .dataStoreId(\"data-store-id\")\n .displayName(\"tf-test-advanced-site-search-config-datastore\")\n .industryVertical(\"GENERIC\")\n .contentConfig(\"PUBLIC_WEBSITE\")\n .solutionTypes(\"SOLUTION_TYPE_CHAT\")\n .createAdvancedSiteSearch(true)\n .skipDefaultSchemaCreation(false)\n .advancedSiteSearchConfig(DataStoreAdvancedSiteSearchConfigArgs.builder()\n .disableInitialIndex(true)\n .disableAutomaticRefresh(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n advancedSiteSearchConfig:\n type: gcp:discoveryengine:DataStore\n name: advanced_site_search_config\n properties:\n location: global\n dataStoreId: data-store-id\n displayName: tf-test-advanced-site-search-config-datastore\n industryVertical: GENERIC\n contentConfig: PUBLIC_WEBSITE\n solutionTypes:\n - SOLUTION_TYPE_CHAT\n createAdvancedSiteSearch: true\n skipDefaultSchemaCreation: false\n advancedSiteSearchConfig:\n disableInitialIndex: true\n disableAutomaticRefresh: 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": { + "advancedSiteSearchConfig": { + "$ref": "#/types/gcp:discoveryengine/DataStoreAdvancedSiteSearchConfig:DataStoreAdvancedSiteSearchConfig", + "description": "Configuration data for advance site search.\nStructure is documented below.\n" + }, "contentConfig": { "type": "string", "description": "The content config of the data store.\nPossible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`.\n" @@ -212151,6 +213659,11 @@ "project" ], "inputProperties": { + "advancedSiteSearchConfig": { + "$ref": "#/types/gcp:discoveryengine/DataStoreAdvancedSiteSearchConfig:DataStoreAdvancedSiteSearchConfig", + "description": "Configuration data for advance site search.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "contentConfig": { "type": "string", "description": "The content config of the data store.\nPossible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`.\n", @@ -212212,6 +213725,11 @@ "stateInputs": { "description": "Input properties used for looking up and filtering DataStore resources.\n", "properties": { + "advancedSiteSearchConfig": { + "$ref": "#/types/gcp:discoveryengine/DataStoreAdvancedSiteSearchConfig:DataStoreAdvancedSiteSearchConfig", + "description": "Configuration data for advance site search.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "contentConfig": { "type": "string", "description": "The content config of the data store.\nPossible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`.\n", @@ -214581,6 +216099,245 @@ "type": "object" } }, + "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment": { + "description": "A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network.\n\n\nTo get more information about InterconnectAttachment, see:\n\n* [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments)\n* How-to Guides\n * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api)\n\n## Example Usage\n\n### Edgenetwork Interconnect Attachment\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNetwork = new gcp.edgenetwork.Network(\"example_network\", {\n networkId: \"example-network\",\n location: \"us-west1\",\n zone: \"\",\n description: \"Example network.\",\n mtu: 9000,\n});\nconst exampleInterconnectAttachment = new gcp.edgenetwork.InterconnectAttachment(\"example_interconnect_attachment\", {\n interconnectAttachmentId: \"example-interconnect-attachment\",\n location: \"us-west1\",\n zone: \"\",\n description: \"Example interconnect attachment.\",\n network: exampleNetwork.id,\n interconnect: \"11111111-2222-3333-4444-555555555555\",\n vlanId: 55,\n mtu: 9000,\n labels: {\n environment: \"dev\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_network = gcp.edgenetwork.Network(\"example_network\",\n network_id=\"example-network\",\n location=\"us-west1\",\n zone=\"\",\n description=\"Example network.\",\n mtu=9000)\nexample_interconnect_attachment = gcp.edgenetwork.InterconnectAttachment(\"example_interconnect_attachment\",\n interconnect_attachment_id=\"example-interconnect-attachment\",\n location=\"us-west1\",\n zone=\"\",\n description=\"Example interconnect attachment.\",\n network=example_network.id,\n interconnect=\"11111111-2222-3333-4444-555555555555\",\n vlan_id=55,\n mtu=9000,\n labels={\n \"environment\": \"dev\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNetwork = new Gcp.EdgeNetwork.Network(\"example_network\", new()\n {\n NetworkId = \"example-network\",\n Location = \"us-west1\",\n Zone = \"\",\n Description = \"Example network.\",\n Mtu = 9000,\n });\n\n var exampleInterconnectAttachment = new Gcp.EdgeNetwork.InterconnectAttachment(\"example_interconnect_attachment\", new()\n {\n InterconnectAttachmentId = \"example-interconnect-attachment\",\n Location = \"us-west1\",\n Zone = \"\",\n Description = \"Example interconnect attachment.\",\n Network = exampleNetwork.Id,\n Interconnect = \"11111111-2222-3333-4444-555555555555\",\n VlanId = 55,\n Mtu = 9000,\n Labels = \n {\n { \"environment\", \"dev\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/edgenetwork\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleNetwork, err := edgenetwork.NewNetwork(ctx, \"example_network\", \u0026edgenetwork.NetworkArgs{\n\t\t\tNetworkId: pulumi.String(\"example-network\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tZone: pulumi.String(\"\"),\n\t\t\tDescription: pulumi.String(\"Example network.\"),\n\t\t\tMtu: pulumi.Int(9000),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = edgenetwork.NewInterconnectAttachment(ctx, \"example_interconnect_attachment\", \u0026edgenetwork.InterconnectAttachmentArgs{\n\t\t\tInterconnectAttachmentId: pulumi.String(\"example-interconnect-attachment\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tZone: pulumi.String(\"\"),\n\t\t\tDescription: pulumi.String(\"Example interconnect attachment.\"),\n\t\t\tNetwork: exampleNetwork.ID(),\n\t\t\tInterconnect: pulumi.String(\"11111111-2222-3333-4444-555555555555\"),\n\t\t\tVlanId: pulumi.Int(55),\n\t\t\tMtu: pulumi.Int(9000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"dev\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.edgenetwork.Network;\nimport com.pulumi.gcp.edgenetwork.NetworkArgs;\nimport com.pulumi.gcp.edgenetwork.InterconnectAttachment;\nimport com.pulumi.gcp.edgenetwork.InterconnectAttachmentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n .networkId(\"example-network\")\n .location(\"us-west1\")\n .zone(\"\")\n .description(\"Example network.\")\n .mtu(9000)\n .build());\n\n var exampleInterconnectAttachment = new InterconnectAttachment(\"exampleInterconnectAttachment\", InterconnectAttachmentArgs.builder()\n .interconnectAttachmentId(\"example-interconnect-attachment\")\n .location(\"us-west1\")\n .zone(\"\")\n .description(\"Example interconnect attachment.\")\n .network(exampleNetwork.id())\n .interconnect(\"11111111-2222-3333-4444-555555555555\")\n .vlanId(55)\n .mtu(9000)\n .labels(Map.of(\"environment\", \"dev\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleInterconnectAttachment:\n type: gcp:edgenetwork:InterconnectAttachment\n name: example_interconnect_attachment\n properties:\n interconnectAttachmentId: example-interconnect-attachment\n location: us-west1\n zone: \"\"\n description: Example interconnect attachment.\n network: ${exampleNetwork.id}\n interconnect: 11111111-2222-3333-4444-555555555555\n vlanId: 55\n mtu: 9000\n labels:\n environment: dev\n exampleNetwork:\n type: gcp:edgenetwork:Network\n name: example_network\n properties:\n networkId: example-network\n location: us-west1\n zone: \"\"\n description: Example network.\n mtu: 9000\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInterconnectAttachment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}`\n\n* `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}`\n\n* `{{location}}/{{zone}}/{{interconnect_attachment_id}}`\n\n* `{{location}}/{{interconnect_attachment_id}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}}\n```\n\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time when the resource was created.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine\nfractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`.\n" + }, + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "interconnect": { + "type": "string", + "description": "The ID of the underlying interconnect that this attachment's traffic will traverse through.\n" + }, + "interconnectAttachmentId": { + "type": "string", + "description": "A unique ID that identifies this interconnect attachment.\n\n\n- - -\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels associated with this resource.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The Google Cloud region to which the target Distributed Cloud Edge zone belongs.\n" + }, + "mtu": { + "type": "integer", + "description": "IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`.\n" + }, + "name": { + "type": "string", + "description": "The canonical name of this resource, with format\n`projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}`\n" + }, + "network": { + "type": "string", + "description": "The ID of the network to which this interconnect attachment belongs.\nMust be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}`\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time when the resource was last updated.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine\nfractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`.\n" + }, + "vlanId": { + "type": "integer", + "description": "VLAN ID provided by user. Must be site-wise unique.\n" + }, + "zone": { + "type": "string", + "description": "The name of the target Distributed Cloud Edge zone.\n" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "interconnect", + "interconnectAttachmentId", + "location", + "name", + "network", + "project", + "pulumiLabels", + "updateTime", + "vlanId", + "zone" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n", + "willReplaceOnChanges": true + }, + "interconnect": { + "type": "string", + "description": "The ID of the underlying interconnect that this attachment's traffic will traverse through.\n", + "willReplaceOnChanges": true + }, + "interconnectAttachmentId": { + "type": "string", + "description": "A unique ID that identifies this interconnect attachment.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels associated with this resource.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The Google Cloud region to which the target Distributed Cloud Edge zone belongs.\n", + "willReplaceOnChanges": true + }, + "mtu": { + "type": "integer", + "description": "IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`.\n", + "willReplaceOnChanges": true + }, + "network": { + "type": "string", + "description": "The ID of the network to which this interconnect attachment belongs.\nMust be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}`\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 + }, + "vlanId": { + "type": "integer", + "description": "VLAN ID provided by user. Must be site-wise unique.\n", + "willReplaceOnChanges": true + }, + "zone": { + "type": "string", + "description": "The name of the target Distributed Cloud Edge zone.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "interconnect", + "interconnectAttachmentId", + "location", + "network", + "vlanId", + "zone" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering InterconnectAttachment resources.\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time when the resource was created.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine\nfractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`.\n" + }, + "description": { + "type": "string", + "description": "A free-text description of the resource. Max length 1024 characters.\n", + "willReplaceOnChanges": true + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true, + "willReplaceOnChanges": true + }, + "interconnect": { + "type": "string", + "description": "The ID of the underlying interconnect that this attachment's traffic will traverse through.\n", + "willReplaceOnChanges": true + }, + "interconnectAttachmentId": { + "type": "string", + "description": "A unique ID that identifies this interconnect attachment.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Labels associated with this resource.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The Google Cloud region to which the target Distributed Cloud Edge zone belongs.\n", + "willReplaceOnChanges": true + }, + "mtu": { + "type": "integer", + "description": "IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The canonical name of this resource, with format\n`projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}`\n" + }, + "network": { + "type": "string", + "description": "The ID of the network to which this interconnect attachment belongs.\nMust be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}`\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time when the resource was last updated.\nA timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine\nfractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`.\n" + }, + "vlanId": { + "type": "integer", + "description": "VLAN ID provided by user. Must be site-wise unique.\n", + "willReplaceOnChanges": true + }, + "zone": { + "type": "string", + "description": "The name of the target Distributed Cloud Edge zone.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:edgenetwork/network:Network": { "description": "A Distributed Cloud Edge network, which provides L3 isolation within a zone.\n\n\nTo get more information about Network, see:\n\n* [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.networks)\n* How-to Guides\n * [Create and manage networks](https://cloud.google.com/distributed-cloud/edge/latest/docs/networks#api)\n\n## Example Usage\n\n### Edgenetwork Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNetwork = new gcp.edgenetwork.Network(\"example_network\", {\n networkId: \"example-network\",\n location: \"us-west1\",\n zone: \"\",\n description: \"Example network.\",\n mtu: 9000,\n labels: {\n environment: \"dev\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_network = gcp.edgenetwork.Network(\"example_network\",\n network_id=\"example-network\",\n location=\"us-west1\",\n zone=\"\",\n description=\"Example network.\",\n mtu=9000,\n labels={\n \"environment\": \"dev\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNetwork = new Gcp.EdgeNetwork.Network(\"example_network\", new()\n {\n NetworkId = \"example-network\",\n Location = \"us-west1\",\n Zone = \"\",\n Description = \"Example network.\",\n Mtu = 9000,\n Labels = \n {\n { \"environment\", \"dev\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/edgenetwork\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := edgenetwork.NewNetwork(ctx, \"example_network\", \u0026edgenetwork.NetworkArgs{\n\t\t\tNetworkId: pulumi.String(\"example-network\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tZone: pulumi.String(\"\"),\n\t\t\tDescription: pulumi.String(\"Example network.\"),\n\t\t\tMtu: pulumi.Int(9000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"dev\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.edgenetwork.Network;\nimport com.pulumi.gcp.edgenetwork.NetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n .networkId(\"example-network\")\n .location(\"us-west1\")\n .zone(\"\")\n .description(\"Example network.\")\n .mtu(9000)\n .labels(Map.of(\"environment\", \"dev\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNetwork:\n type: gcp:edgenetwork:Network\n name: example_network\n properties:\n networkId: example-network\n location: us-west1\n zone: \"\"\n description: Example network.\n mtu: 9000\n labels:\n environment: dev\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetwork can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}`\n\n* `{{project}}/{{location}}/{{zone}}/{{network_id}}`\n\n* `{{location}}/{{zone}}/{{network_id}}`\n\n* `{{location}}/{{network_id}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Network can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:edgenetwork/network:Network default projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/network:Network default {{project}}/{{location}}/{{zone}}/{{network_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/network:Network default {{location}}/{{zone}}/{{network_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/network:Network default {{location}}/{{network_id}}\n```\n\n```sh\n$ pulumi import gcp:edgenetwork/network:Network default {{name}}\n```\n\n", "properties": { @@ -219902,7 +221659,7 @@ } }, "gcp:firestore/field:Field": { - "description": "Represents a single field in the database.\nFields are grouped by their \"Collection Group\", which represent all collections\nin the database with the same id.\n\n\nTo get more information about Field, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.fields)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Single Field override on a project that\n already has a Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource with `location_id` set to your\nchosen location.\n\n## Example Usage\n\n### Firestore Field Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst basic = new gcp.firestore.Field(\"basic\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__8493\",\n field: \"basic\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n queryScope: \"COLLECTION_GROUP\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nbasic = gcp.firestore.Field(\"basic\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__8493\",\n field=\"basic\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n \"query_scope\": \"COLLECTION_GROUP\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var basic = new Gcp.Firestore.Field(\"basic\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__8493\",\n FieldId = \"basic\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n QueryScope = \"COLLECTION_GROUP\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"basic\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__8493\"),\n\t\t\tField: pulumi.String(\"basic\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t\tQueryScope: pulumi.String(\"COLLECTION_GROUP\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var basic = new Field(\"basic\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__8493\")\n .field(\"basic\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .queryScope(\"COLLECTION_GROUP\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n basic:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__8493\n field: basic\n indexConfig:\n indexes:\n - order: ASCENDING\n queryScope: COLLECTION_GROUP\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Timestamp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst timestamp = new gcp.firestore.Field(\"timestamp\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms\",\n field: \"timestamp\",\n ttlConfig: {},\n indexConfig: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\ntimestamp = gcp.firestore.Field(\"timestamp\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms\",\n field=\"timestamp\",\n ttl_config={},\n index_config={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var timestamp = new Gcp.Firestore.Field(\"timestamp\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms\",\n FieldId = \"timestamp\",\n TtlConfig = null,\n IndexConfig = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"timestamp\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms\"),\n\t\t\tField: pulumi.String(\"timestamp\"),\n\t\t\tTtlConfig: \u0026firestore.FieldTtlConfigArgs{},\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldTtlConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var timestamp = new Field(\"timestamp\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms\")\n .field(\"timestamp\")\n .ttlConfig()\n .indexConfig()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n timestamp:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms\n field: timestamp\n ttlConfig: {}\n indexConfig: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Match Override\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst matchOverride = new gcp.firestore.Field(\"match_override\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__9106\",\n field: \"field_with_same_configuration_as_ancestor\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n },\n {\n order: \"DESCENDING\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nmatch_override = gcp.firestore.Field(\"match_override\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__9106\",\n field=\"field_with_same_configuration_as_ancestor\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n },\n {\n \"order\": \"DESCENDING\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var matchOverride = new Gcp.Firestore.Field(\"match_override\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__9106\",\n FieldId = \"field_with_same_configuration_as_ancestor\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"DESCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"match_override\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__9106\"),\n\t\t\tField: pulumi.String(\"field_with_same_configuration_as_ancestor\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var matchOverride = new Field(\"matchOverride\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__9106\")\n .field(\"field_with_same_configuration_as_ancestor\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .order(\"DESCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n matchOverride:\n type: gcp:firestore:Field\n name: match_override\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__9106\n field: field_with_same_configuration_as_ancestor\n indexConfig:\n indexes:\n - order: ASCENDING\n - order: DESCENDING\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nField can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Field can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/field:Field default {{name}}\n```\n\n", + "description": "Represents a single field in the database.\nFields are grouped by their \"Collection Group\", which represent all collections\nin the database with the same id.\n\n\nTo get more information about Field, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.fields)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Single Field override on a project that\n already has a Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource with `location_id` set to your\nchosen location.\n\n## Example Usage\n\n### Firestore Field Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst basic = new gcp.firestore.Field(\"basic\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__9106\",\n field: \"basic\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n queryScope: \"COLLECTION_GROUP\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nbasic = gcp.firestore.Field(\"basic\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__9106\",\n field=\"basic\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n \"query_scope\": \"COLLECTION_GROUP\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var basic = new Gcp.Firestore.Field(\"basic\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__9106\",\n FieldId = \"basic\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n QueryScope = \"COLLECTION_GROUP\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"basic\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__9106\"),\n\t\t\tField: pulumi.String(\"basic\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t\tQueryScope: pulumi.String(\"COLLECTION_GROUP\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var basic = new Field(\"basic\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__9106\")\n .field(\"basic\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .queryScope(\"COLLECTION_GROUP\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n basic:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__9106\n field: basic\n indexConfig:\n indexes:\n - order: ASCENDING\n queryScope: COLLECTION_GROUP\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Timestamp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst timestamp = new gcp.firestore.Field(\"timestamp\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms\",\n field: \"timestamp\",\n ttlConfig: {},\n indexConfig: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\ntimestamp = gcp.firestore.Field(\"timestamp\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms\",\n field=\"timestamp\",\n ttl_config={},\n index_config={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var timestamp = new Gcp.Firestore.Field(\"timestamp\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms\",\n FieldId = \"timestamp\",\n TtlConfig = null,\n IndexConfig = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"timestamp\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms\"),\n\t\t\tField: pulumi.String(\"timestamp\"),\n\t\t\tTtlConfig: \u0026firestore.FieldTtlConfigArgs{},\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldTtlConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var timestamp = new Field(\"timestamp\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms\")\n .field(\"timestamp\")\n .ttlConfig()\n .indexConfig()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n timestamp:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms\n field: timestamp\n ttlConfig: {}\n indexConfig: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Match Override\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst matchOverride = new gcp.firestore.Field(\"match_override\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__27169\",\n field: \"field_with_same_configuration_as_ancestor\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n },\n {\n order: \"DESCENDING\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nmatch_override = gcp.firestore.Field(\"match_override\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__27169\",\n field=\"field_with_same_configuration_as_ancestor\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n },\n {\n \"order\": \"DESCENDING\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var matchOverride = new Gcp.Firestore.Field(\"match_override\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__27169\",\n FieldId = \"field_with_same_configuration_as_ancestor\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"DESCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"match_override\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__27169\"),\n\t\t\tField: pulumi.String(\"field_with_same_configuration_as_ancestor\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var matchOverride = new Field(\"matchOverride\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__27169\")\n .field(\"field_with_same_configuration_as_ancestor\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .order(\"DESCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n matchOverride:\n type: gcp:firestore:Field\n name: match_override\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__27169\n field: field_with_same_configuration_as_ancestor\n indexConfig:\n indexes:\n - order: ASCENDING\n - order: DESCENDING\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nField can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Field can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/field:Field default {{name}}\n```\n\n", "properties": { "collection": { "type": "string", @@ -220724,6 +222481,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", "secret": true }, + "forceDestroy": { + "type": "boolean", + "description": "If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted.\n" + }, "kmsKey": { "type": "string", "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n" @@ -220781,6 +222542,10 @@ "description": "Required. Id of the Code Repository Index.\n\n\n- - -\n", "willReplaceOnChanges": true }, + "forceDestroy": { + "type": "boolean", + "description": "If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted.\n" + }, "kmsKey": { "type": "string", "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n", @@ -220828,6 +222593,10 @@ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", "secret": true }, + "forceDestroy": { + "type": "boolean", + "description": "If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted.\n" + }, "kmsKey": { "type": "string", "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n", @@ -223411,7 +225180,7 @@ } }, "gcp:gkehub/membershipBinding:MembershipBinding": { - "description": "MembershipBinding is a subresource of a Membership, representing what Fleet Scopes (or other, future Fleet resources) a Membership is bound to.\n\n\nTo get more information about MembershipBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.memberships.bindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Membership Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_27169\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_75223\"});\nconst membershipBinding = new gcp.gkehub.MembershipBinding(\"membership_binding\", {\n membershipBindingId: \"tf-test-membership-binding_41819\",\n scope: scope.name,\n membershipId: membership.membershipId,\n location: \"global\",\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [\n membership,\n scope,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_27169\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_75223\")\nmembership_binding = gcp.gkehub.MembershipBinding(\"membership_binding\",\n membership_binding_id=\"tf-test-membership-binding_41819\",\n scope=scope.name,\n membership_id=membership.membership_id,\n location=\"global\",\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n membership,\n scope,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_27169\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_75223\",\n });\n\n var membershipBinding = new Gcp.GkeHub.MembershipBinding(\"membership_binding\", new()\n {\n MembershipBindingId = \"tf-test-membership-binding_41819\",\n Scope = scope.Name,\n MembershipId = membership.MembershipId,\n Location = \"global\",\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_27169\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_75223\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipBinding(ctx, \"membership_binding\", \u0026gkehub.MembershipBindingArgs{\n\t\t\tMembershipBindingId: pulumi.String(\"tf-test-membership-binding_41819\"),\n\t\t\tScope: scope.Name,\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.MembershipBinding;\nimport com.pulumi.gcp.gkehub.MembershipBindingArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_27169\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_75223\")\n .build());\n\n var membershipBinding = new MembershipBinding(\"membershipBinding\", MembershipBindingArgs.builder()\n .membershipBindingId(\"tf-test-membership-binding_41819\")\n .scope(scope.name())\n .membershipId(membership.membershipId())\n .location(\"global\")\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n membership,\n scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_27169\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_75223\n membershipBinding:\n type: gcp:gkehub:MembershipBinding\n name: membership_binding\n properties:\n membershipBindingId: tf-test-membership-binding_41819\n scope: ${scope.name}\n membershipId: ${membership.membershipId}\n location: global\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${membership}\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n", + "description": "MembershipBinding is a subresource of a Membership, representing what Fleet Scopes (or other, future Fleet resources) a Membership is bound to.\n\n\nTo get more information about MembershipBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.memberships.bindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Membership Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_75223\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_41819\"});\nconst membershipBinding = new gcp.gkehub.MembershipBinding(\"membership_binding\", {\n membershipBindingId: \"tf-test-membership-binding_75092\",\n scope: scope.name,\n membershipId: membership.membershipId,\n location: \"global\",\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [\n membership,\n scope,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_75223\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_41819\")\nmembership_binding = gcp.gkehub.MembershipBinding(\"membership_binding\",\n membership_binding_id=\"tf-test-membership-binding_75092\",\n scope=scope.name,\n membership_id=membership.membership_id,\n location=\"global\",\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n membership,\n scope,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_75223\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_41819\",\n });\n\n var membershipBinding = new Gcp.GkeHub.MembershipBinding(\"membership_binding\", new()\n {\n MembershipBindingId = \"tf-test-membership-binding_75092\",\n Scope = scope.Name,\n MembershipId = membership.MembershipId,\n Location = \"global\",\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_75223\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_41819\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipBinding(ctx, \"membership_binding\", \u0026gkehub.MembershipBindingArgs{\n\t\t\tMembershipBindingId: pulumi.String(\"tf-test-membership-binding_75092\"),\n\t\t\tScope: scope.Name,\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.MembershipBinding;\nimport com.pulumi.gcp.gkehub.MembershipBindingArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_75223\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_41819\")\n .build());\n\n var membershipBinding = new MembershipBinding(\"membershipBinding\", MembershipBindingArgs.builder()\n .membershipBindingId(\"tf-test-membership-binding_75092\")\n .scope(scope.name())\n .membershipId(membership.membershipId())\n .location(\"global\")\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n membership,\n scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_75223\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_41819\n membershipBinding:\n type: gcp:gkehub:MembershipBinding\n name: membership_binding\n properties:\n membershipBindingId: tf-test-membership-binding_75092\n scope: ${scope.name}\n membershipId: ${membership.membershipId}\n location: global\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${membership}\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -223934,7 +225703,7 @@ } }, "gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding": { - "description": "## Example Usage\n\n### Gkehub Membership Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_75092\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst project = gcp.organizations.getProject({});\nconst membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", {\n membershipRbacRoleBindingId: \"tf-test-membership-rbac-role-binding_2605\",\n membershipId: membership.membershipId,\n user: project.then(project =\u003e `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`),\n role: {\n predefinedRole: \"ANTHOS_SUPPORT\",\n },\n location: \"global\",\n}, {\n dependsOn: [membership],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_75092\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nproject = gcp.organizations.get_project()\nmembership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\",\n membership_rbac_role_binding_id=\"tf-test-membership-rbac-role-binding_2605\",\n membership_id=membership.membership_id,\n user=f\"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n role={\n \"predefined_role\": \"ANTHOS_SUPPORT\",\n },\n location=\"global\",\n opts = pulumi.ResourceOptions(depends_on=[membership]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_75092\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", new()\n {\n MembershipRbacRoleBindingId = \"tf-test-membership-rbac-role-binding_2605\",\n MembershipId = membership.MembershipId,\n User = $\"service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ANTHOS_SUPPORT\",\n },\n Location = \"global\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_75092\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipRbacRoleBinding(ctx, \"membership_rbac_role_binding\", \u0026gkehub.MembershipRbacRoleBindingArgs{\n\t\t\tMembershipRbacRoleBindingId: pulumi.String(\"tf-test-membership-rbac-role-binding_2605\"),\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tUser: pulumi.Sprintf(\"service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.Number),\n\t\t\tRole: \u0026gkehub.MembershipRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ANTHOS_SUPPORT\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_75092\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var membershipRbacRoleBinding = new MembershipRbacRoleBinding(\"membershipRbacRoleBinding\", MembershipRbacRoleBindingArgs.builder()\n .membershipRbacRoleBindingId(\"tf-test-membership-rbac-role-binding_2605\")\n .membershipId(membership.membershipId())\n .user(String.format(\"service-%s@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .role(MembershipRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ANTHOS_SUPPORT\")\n .build())\n .location(\"global\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(membership)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_75092\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n membershipRbacRoleBinding:\n type: gcp:gkehub:MembershipRbacRoleBinding\n name: membership_rbac_role_binding\n properties:\n membershipRbacRoleBindingId: tf-test-membership-rbac-role-binding_2605\n membershipId: ${membership.membershipId}\n user: service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\n role:\n predefinedRole: ANTHOS_SUPPORT\n location: global\n options:\n dependsOn:\n - ${membership}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n", + "description": "## Example Usage\n\n### Gkehub Membership Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_2605\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst project = gcp.organizations.getProject({});\nconst membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", {\n membershipRbacRoleBindingId: \"tf-test-membership-rbac-role-binding_34535\",\n membershipId: membership.membershipId,\n user: project.then(project =\u003e `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`),\n role: {\n predefinedRole: \"ANTHOS_SUPPORT\",\n },\n location: \"global\",\n}, {\n dependsOn: [membership],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_2605\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nproject = gcp.organizations.get_project()\nmembership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\",\n membership_rbac_role_binding_id=\"tf-test-membership-rbac-role-binding_34535\",\n membership_id=membership.membership_id,\n user=f\"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n role={\n \"predefined_role\": \"ANTHOS_SUPPORT\",\n },\n location=\"global\",\n opts = pulumi.ResourceOptions(depends_on=[membership]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_2605\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", new()\n {\n MembershipRbacRoleBindingId = \"tf-test-membership-rbac-role-binding_34535\",\n MembershipId = membership.MembershipId,\n User = $\"service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ANTHOS_SUPPORT\",\n },\n Location = \"global\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_2605\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipRbacRoleBinding(ctx, \"membership_rbac_role_binding\", \u0026gkehub.MembershipRbacRoleBindingArgs{\n\t\t\tMembershipRbacRoleBindingId: pulumi.String(\"tf-test-membership-rbac-role-binding_34535\"),\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tUser: pulumi.Sprintf(\"service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.Number),\n\t\t\tRole: \u0026gkehub.MembershipRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ANTHOS_SUPPORT\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_2605\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var membershipRbacRoleBinding = new MembershipRbacRoleBinding(\"membershipRbacRoleBinding\", MembershipRbacRoleBindingArgs.builder()\n .membershipRbacRoleBindingId(\"tf-test-membership-rbac-role-binding_34535\")\n .membershipId(membership.membershipId())\n .user(String.format(\"service-%s@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .role(MembershipRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ANTHOS_SUPPORT\")\n .build())\n .location(\"global\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(membership)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_2605\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n membershipRbacRoleBinding:\n type: gcp:gkehub:MembershipRbacRoleBinding\n name: membership_rbac_role_binding\n properties:\n membershipRbacRoleBindingId: tf-test-membership-rbac-role-binding_34535\n membershipId: ${membership.membershipId}\n user: service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\n role:\n predefinedRole: ANTHOS_SUPPORT\n location: global\n options:\n dependsOn:\n - ${membership}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -224103,7 +225872,7 @@ } }, "gcp:gkehub/namespace:Namespace": { - "description": "Namespace represents a namespace across the Fleet.\n\n\nTo get more information about Namespace, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.namespaces)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Namespace Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_34535\"});\nconst namespace = new gcp.gkehub.Namespace(\"namespace\", {\n scopeNamespaceId: \"tf-test-namespace_22375\",\n scopeId: scope.scopeId,\n scope: scope.name,\n namespaceLabels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_34535\")\nnamespace = gcp.gkehub.Namespace(\"namespace\",\n scope_namespace_id=\"tf-test-namespace_22375\",\n scope_id=scope.scope_id,\n scope=scope.name,\n namespace_labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_34535\",\n });\n\n var @namespace = new Gcp.GkeHub.Namespace(\"namespace\", new()\n {\n ScopeNamespaceId = \"tf-test-namespace_22375\",\n ScopeId = scope.ScopeId,\n Scope = scope.Name,\n NamespaceLabels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_34535\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewNamespace(ctx, \"namespace\", \u0026gkehub.NamespaceArgs{\n\t\t\tScopeNamespaceId: pulumi.String(\"tf-test-namespace_22375\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tScope: scope.Name,\n\t\t\tNamespaceLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.Namespace;\nimport com.pulumi.gcp.gkehub.NamespaceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_34535\")\n .build());\n\n var namespace = new Namespace(\"namespace\", NamespaceArgs.builder()\n .scopeNamespaceId(\"tf-test-namespace_22375\")\n .scopeId(scope.scopeId())\n .scope(scope.name())\n .namespaceLabels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_34535\n namespace:\n type: gcp:gkehub:Namespace\n properties:\n scopeNamespaceId: tf-test-namespace_22375\n scopeId: ${scope.scopeId}\n scope: ${scope.name}\n namespaceLabels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNamespace can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_namespace_id}}`\n\n* `{{scope_id}}/{{scope_namespace_id}}`\n\nWhen using the `pulumi import` command, Namespace can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{project}}/{{scope_id}}/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{scope_id}}/{{scope_namespace_id}}\n```\n\n", + "description": "Namespace represents a namespace across the Fleet.\n\n\nTo get more information about Namespace, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.namespaces)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Namespace Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_22375\"});\nconst namespace = new gcp.gkehub.Namespace(\"namespace\", {\n scopeNamespaceId: \"tf-test-namespace_29439\",\n scopeId: scope.scopeId,\n scope: scope.name,\n namespaceLabels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_22375\")\nnamespace = gcp.gkehub.Namespace(\"namespace\",\n scope_namespace_id=\"tf-test-namespace_29439\",\n scope_id=scope.scope_id,\n scope=scope.name,\n namespace_labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_22375\",\n });\n\n var @namespace = new Gcp.GkeHub.Namespace(\"namespace\", new()\n {\n ScopeNamespaceId = \"tf-test-namespace_29439\",\n ScopeId = scope.ScopeId,\n Scope = scope.Name,\n NamespaceLabels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_22375\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewNamespace(ctx, \"namespace\", \u0026gkehub.NamespaceArgs{\n\t\t\tScopeNamespaceId: pulumi.String(\"tf-test-namespace_29439\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tScope: scope.Name,\n\t\t\tNamespaceLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.Namespace;\nimport com.pulumi.gcp.gkehub.NamespaceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_22375\")\n .build());\n\n var namespace = new Namespace(\"namespace\", NamespaceArgs.builder()\n .scopeNamespaceId(\"tf-test-namespace_29439\")\n .scopeId(scope.scopeId())\n .scope(scope.name())\n .namespaceLabels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_22375\n namespace:\n type: gcp:gkehub:Namespace\n properties:\n scopeNamespaceId: tf-test-namespace_29439\n scopeId: ${scope.scopeId}\n scope: ${scope.name}\n namespaceLabels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNamespace can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_namespace_id}}`\n\n* `{{scope_id}}/{{scope_namespace_id}}`\n\nWhen using the `pulumi import` command, Namespace can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{project}}/{{scope_id}}/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{scope_id}}/{{scope_namespace_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -224772,7 +226541,7 @@ } }, "gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding": { - "description": "RBACRoleBinding represents a rbacrolebinding across the Fleet.\n\n\nTo get more information about ScopeRBACRoleBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.rbacrolebindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Scope Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_29439\"});\nconst scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", {\n scopeRbacRoleBindingId: \"tf-test-scope-rbac-role-binding_87786\",\n scopeId: scope.scopeId,\n user: \"test-email@gmail.com\",\n role: {\n predefinedRole: \"ADMIN\",\n },\n labels: {\n key: \"value\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_29439\")\nscope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\",\n scope_rbac_role_binding_id=\"tf-test-scope-rbac-role-binding_87786\",\n scope_id=scope.scope_id,\n user=\"test-email@gmail.com\",\n role={\n \"predefined_role\": \"ADMIN\",\n },\n labels={\n \"key\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_29439\",\n });\n\n var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", new()\n {\n ScopeRbacRoleBindingId = \"tf-test-scope-rbac-role-binding_87786\",\n ScopeId = scope.ScopeId,\n User = \"test-email@gmail.com\",\n Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ADMIN\",\n },\n Labels = \n {\n { \"key\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_29439\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewScopeRbacRoleBinding(ctx, \"scope_rbac_role_binding\", \u0026gkehub.ScopeRbacRoleBindingArgs{\n\t\t\tScopeRbacRoleBindingId: pulumi.String(\"tf-test-scope-rbac-role-binding_87786\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tUser: pulumi.String(\"test-email@gmail.com\"),\n\t\t\tRole: \u0026gkehub.ScopeRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ADMIN\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.ScopeRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_29439\")\n .build());\n\n var scopeRbacRoleBinding = new ScopeRbacRoleBinding(\"scopeRbacRoleBinding\", ScopeRbacRoleBindingArgs.builder()\n .scopeRbacRoleBindingId(\"tf-test-scope-rbac-role-binding_87786\")\n .scopeId(scope.scopeId())\n .user(\"test-email@gmail.com\")\n .role(ScopeRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ADMIN\")\n .build())\n .labels(Map.of(\"key\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_29439\n scopeRbacRoleBinding:\n type: gcp:gkehub:ScopeRbacRoleBinding\n name: scope_rbac_role_binding\n properties:\n scopeRbacRoleBindingId: tf-test-scope-rbac-role-binding_87786\n scopeId: ${scope.scopeId}\n user: test-email@gmail.com\n role:\n predefinedRole: ADMIN\n labels:\n key: value\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScopeRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\n* `{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, ScopeRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n", + "description": "RBACRoleBinding represents a rbacrolebinding across the Fleet.\n\n\nTo get more information about ScopeRBACRoleBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.rbacrolebindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Scope Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_87786\"});\nconst scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", {\n scopeRbacRoleBindingId: \"tf-test-scope-rbac-role-binding_2067\",\n scopeId: scope.scopeId,\n user: \"test-email@gmail.com\",\n role: {\n predefinedRole: \"ADMIN\",\n },\n labels: {\n key: \"value\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_87786\")\nscope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\",\n scope_rbac_role_binding_id=\"tf-test-scope-rbac-role-binding_2067\",\n scope_id=scope.scope_id,\n user=\"test-email@gmail.com\",\n role={\n \"predefined_role\": \"ADMIN\",\n },\n labels={\n \"key\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_87786\",\n });\n\n var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", new()\n {\n ScopeRbacRoleBindingId = \"tf-test-scope-rbac-role-binding_2067\",\n ScopeId = scope.ScopeId,\n User = \"test-email@gmail.com\",\n Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ADMIN\",\n },\n Labels = \n {\n { \"key\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_87786\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewScopeRbacRoleBinding(ctx, \"scope_rbac_role_binding\", \u0026gkehub.ScopeRbacRoleBindingArgs{\n\t\t\tScopeRbacRoleBindingId: pulumi.String(\"tf-test-scope-rbac-role-binding_2067\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tUser: pulumi.String(\"test-email@gmail.com\"),\n\t\t\tRole: \u0026gkehub.ScopeRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ADMIN\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.ScopeRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_87786\")\n .build());\n\n var scopeRbacRoleBinding = new ScopeRbacRoleBinding(\"scopeRbacRoleBinding\", ScopeRbacRoleBindingArgs.builder()\n .scopeRbacRoleBindingId(\"tf-test-scope-rbac-role-binding_2067\")\n .scopeId(scope.scopeId())\n .user(\"test-email@gmail.com\")\n .role(ScopeRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ADMIN\")\n .build())\n .labels(Map.of(\"key\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_87786\n scopeRbacRoleBinding:\n type: gcp:gkehub:ScopeRbacRoleBinding\n name: scope_rbac_role_binding\n properties:\n scopeRbacRoleBindingId: tf-test-scope-rbac-role-binding_2067\n scopeId: ${scope.scopeId}\n user: test-email@gmail.com\n role:\n predefinedRole: ADMIN\n labels:\n key: value\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScopeRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\n* `{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, ScopeRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -231899,7 +233668,7 @@ } }, "gcp:iap/tunnelDestGroup:TunnelDestGroup": { - "description": "Tunnel destination groups represent resources that have the same tunnel access restrictions.\n\n\nTo get more information about TunnelDestGroup, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.iap_tunnel.locations.destGroups)\n* How-to Guides\n * [Set up IAP TCP forwarding with an IP address or hostname in a Google Cloud or non-Google Cloud environment](https://cloud.google.com/iap/docs/tcp-by-host)\n\n## Example Usage\n\n### Iap Destgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst destGroup = new gcp.iap.TunnelDestGroup(\"dest_group\", {\n region: \"us-central1\",\n groupName: \"testgroup_2067\",\n cidrs: [\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndest_group = gcp.iap.TunnelDestGroup(\"dest_group\",\n region=\"us-central1\",\n group_name=\"testgroup_2067\",\n cidrs=[\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var destGroup = new Gcp.Iap.TunnelDestGroup(\"dest_group\", new()\n {\n Region = \"us-central1\",\n GroupName = \"testgroup_2067\",\n Cidrs = new[]\n {\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iap.NewTunnelDestGroup(ctx, \"dest_group\", \u0026iap.TunnelDestGroupArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tGroupName: pulumi.String(\"testgroup_2067\"),\n\t\t\tCidrs: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.1.0.0/16\"),\n\t\t\t\tpulumi.String(\"192.168.10.0/24\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iap.TunnelDestGroup;\nimport com.pulumi.gcp.iap.TunnelDestGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var destGroup = new TunnelDestGroup(\"destGroup\", TunnelDestGroupArgs.builder()\n .region(\"us-central1\")\n .groupName(\"testgroup_2067\")\n .cidrs( \n \"10.1.0.0/16\",\n \"192.168.10.0/24\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destGroup:\n type: gcp:iap:TunnelDestGroup\n name: dest_group\n properties:\n region: us-central1\n groupName: testgroup_2067\n cidrs:\n - 10.1.0.0/16\n - 192.168.10.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTunnelDestGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/{{region}}/{{group_name}}`\n\n* `{{region}}/destGroups/{{group_name}}`\n\n* `{{region}}/{{group_name}}`\n\n* `{{group_name}}`\n\nWhen using the `pulumi import` command, TunnelDestGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/{{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{group_name}}\n```\n\n", + "description": "Tunnel destination groups represent resources that have the same tunnel access restrictions.\n\n\nTo get more information about TunnelDestGroup, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.iap_tunnel.locations.destGroups)\n* How-to Guides\n * [Set up IAP TCP forwarding with an IP address or hostname in a Google Cloud or non-Google Cloud environment](https://cloud.google.com/iap/docs/tcp-by-host)\n\n## Example Usage\n\n### Iap Destgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst destGroup = new gcp.iap.TunnelDestGroup(\"dest_group\", {\n region: \"us-central1\",\n groupName: \"testgroup_40785\",\n cidrs: [\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndest_group = gcp.iap.TunnelDestGroup(\"dest_group\",\n region=\"us-central1\",\n group_name=\"testgroup_40785\",\n cidrs=[\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var destGroup = new Gcp.Iap.TunnelDestGroup(\"dest_group\", new()\n {\n Region = \"us-central1\",\n GroupName = \"testgroup_40785\",\n Cidrs = new[]\n {\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iap.NewTunnelDestGroup(ctx, \"dest_group\", \u0026iap.TunnelDestGroupArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tGroupName: pulumi.String(\"testgroup_40785\"),\n\t\t\tCidrs: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.1.0.0/16\"),\n\t\t\t\tpulumi.String(\"192.168.10.0/24\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iap.TunnelDestGroup;\nimport com.pulumi.gcp.iap.TunnelDestGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var destGroup = new TunnelDestGroup(\"destGroup\", TunnelDestGroupArgs.builder()\n .region(\"us-central1\")\n .groupName(\"testgroup_40785\")\n .cidrs( \n \"10.1.0.0/16\",\n \"192.168.10.0/24\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destGroup:\n type: gcp:iap:TunnelDestGroup\n name: dest_group\n properties:\n region: us-central1\n groupName: testgroup_40785\n cidrs:\n - 10.1.0.0/16\n - 192.168.10.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTunnelDestGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/{{region}}/{{group_name}}`\n\n* `{{region}}/destGroups/{{group_name}}`\n\n* `{{region}}/{{group_name}}`\n\n* `{{group_name}}`\n\nWhen using the `pulumi import` command, TunnelDestGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/{{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{group_name}}\n```\n\n", "properties": { "cidrs": { "type": "array", @@ -235756,7 +237525,7 @@ } }, "gcp:integrationconnectors/managedZone:ManagedZone": { - "description": "An Integration connectors Managed Zone.\n\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/integration-connectors/docs/reference/rest/v1/projects.locations.global.managedZones)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/integration-connectors/docs)\n\n## Example Usage\n\n### Integration Connectors Managed Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst targetProject = new gcp.organizations.Project(\"target_project\", {\n projectId: \"tf-test_40785\",\n name: \"tf-test_79169\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst testProject = gcp.organizations.getProject({});\nconst dnsPeerBinding = new gcp.projects.IAMMember(\"dns_peer_binding\", {\n project: targetProject.projectId,\n role: \"roles/dns.peer\",\n member: testProject.then(testProject =\u003e `serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com`),\n});\nconst dns = new gcp.projects.Service(\"dns\", {\n project: targetProject.projectId,\n service: \"dns.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: targetProject.projectId,\n service: \"compute.googleapis.com\",\n});\nconst network = new gcp.compute.Network(\"network\", {\n project: targetProject.projectId,\n name: \"test\",\n autoCreateSubnetworks: false,\n}, {\n dependsOn: [compute],\n});\nconst zone = new gcp.dns.ManagedZone(\"zone\", {\n name: \"tf-test-dns_56529\",\n dnsName: \"private_75413.example.com.\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network.id,\n }],\n },\n}, {\n dependsOn: [dns],\n});\nconst testmanagedzone = new gcp.integrationconnectors.ManagedZone(\"testmanagedzone\", {\n name: \"test\",\n description: \"tf created description\",\n labels: {\n intent: \"example\",\n },\n targetProject: targetProject.projectId,\n targetVpc: \"test\",\n dns: zone.dnsName,\n}, {\n dependsOn: [\n dnsPeerBinding,\n zone,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_project = gcp.organizations.Project(\"target_project\",\n project_id=\"tf-test_40785\",\n name=\"tf-test_79169\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_project = gcp.organizations.get_project()\ndns_peer_binding = gcp.projects.IAMMember(\"dns_peer_binding\",\n project=target_project.project_id,\n role=\"roles/dns.peer\",\n member=f\"serviceAccount:service-{test_project.number}@gcp-sa-connectors.iam.gserviceaccount.com\")\ndns = gcp.projects.Service(\"dns\",\n project=target_project.project_id,\n service=\"dns.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=target_project.project_id,\n service=\"compute.googleapis.com\")\nnetwork = gcp.compute.Network(\"network\",\n project=target_project.project_id,\n name=\"test\",\n auto_create_subnetworks=False,\n opts = pulumi.ResourceOptions(depends_on=[compute]))\nzone = gcp.dns.ManagedZone(\"zone\",\n name=\"tf-test-dns_56529\",\n dns_name=\"private_75413.example.com.\",\n visibility=\"private\",\n private_visibility_config={\n \"networks\": [{\n \"network_url\": network.id,\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[dns]))\ntestmanagedzone = gcp.integrationconnectors.ManagedZone(\"testmanagedzone\",\n name=\"test\",\n description=\"tf created description\",\n labels={\n \"intent\": \"example\",\n },\n target_project=target_project.project_id,\n target_vpc=\"test\",\n dns=zone.dns_name,\n opts = pulumi.ResourceOptions(depends_on=[\n dns_peer_binding,\n zone,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var targetProject = new Gcp.Organizations.Project(\"target_project\", new()\n {\n ProjectId = \"tf-test_40785\",\n Name = \"tf-test_79169\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var dnsPeerBinding = new Gcp.Projects.IAMMember(\"dns_peer_binding\", new()\n {\n Project = targetProject.ProjectId,\n Role = \"roles/dns.peer\",\n Member = $\"serviceAccount:service-{testProject.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-connectors.iam.gserviceaccount.com\",\n });\n\n var dns = new Gcp.Projects.Service(\"dns\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"dns.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = targetProject.ProjectId,\n Name = \"test\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n compute,\n },\n });\n\n var zone = new Gcp.Dns.ManagedZone(\"zone\", new()\n {\n Name = \"tf-test-dns_56529\",\n DnsName = \"private_75413.example.com.\",\n Visibility = \"private\",\n PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs\n {\n Networks = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network.Id,\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dns,\n },\n });\n\n var testmanagedzone = new Gcp.IntegrationConnectors.ManagedZone(\"testmanagedzone\", new()\n {\n Name = \"test\",\n Description = \"tf created description\",\n Labels = \n {\n { \"intent\", \"example\" },\n },\n TargetProject = targetProject.ProjectId,\n TargetVpc = \"test\",\n Dns = zone.DnsName,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dnsPeerBinding,\n zone,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/integrationconnectors\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttargetProject, err := organizations.NewProject(ctx, \"target_project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_40785\"),\n\t\t\tName: pulumi.String(\"tf-test_79169\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdnsPeerBinding, err := projects.NewIAMMember(ctx, \"dns_peer_binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tRole: pulumi.String(\"roles/dns.peer\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdns, err := projects.NewService(ctx, \"dns\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"dns.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcompute, err := projects.NewService(ctx, \"compute\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"compute.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcompute,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tzone, err := dns.NewManagedZone(ctx, \"zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"tf-test-dns_56529\"),\n\t\t\tDnsName: pulumi.String(\"private_75413.example.com.\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tPrivateVisibilityConfig: \u0026dns.ManagedZonePrivateVisibilityConfigArgs{\n\t\t\t\tNetworks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdns,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = integrationconnectors.NewManagedZone(ctx, \"testmanagedzone\", \u0026integrationconnectors.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"tf created description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"intent\": pulumi.String(\"example\"),\n\t\t\t},\n\t\t\tTargetProject: targetProject.ProjectId,\n\t\t\tTargetVpc: pulumi.String(\"test\"),\n\t\t\tDns: zone.DnsName,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdnsPeerBinding,\n\t\t\tzone,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.integrationconnectors.ManagedZone;\nimport com.pulumi.gcp.integrationconnectors.ManagedZoneArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var targetProject = new Project(\"targetProject\", ProjectArgs.builder()\n .projectId(\"tf-test_40785\")\n .name(\"tf-test_79169\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n final var testProject = OrganizationsFunctions.getProject();\n\n var dnsPeerBinding = new IAMMember(\"dnsPeerBinding\", IAMMemberArgs.builder()\n .project(targetProject.projectId())\n .role(\"roles/dns.peer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var dns = new Service(\"dns\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"dns.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .project(targetProject.projectId())\n .name(\"test\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var zone = new ManagedZone(\"zone\", ManagedZoneArgs.builder()\n .name(\"tf-test-dns_56529\")\n .dnsName(\"private_75413.example.com.\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(dns)\n .build());\n\n var testmanagedzone = new ManagedZone(\"testmanagedzone\", ManagedZoneArgs.builder()\n .name(\"test\")\n .description(\"tf created description\")\n .labels(Map.of(\"intent\", \"example\"))\n .targetProject(targetProject.projectId())\n .targetVpc(\"test\")\n .dns(zone.dnsName())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n dnsPeerBinding,\n zone)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n targetProject:\n type: gcp:organizations:Project\n name: target_project\n properties:\n projectId: tf-test_40785\n name: tf-test_79169\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n dnsPeerBinding:\n type: gcp:projects:IAMMember\n name: dns_peer_binding\n properties:\n project: ${targetProject.projectId}\n role: roles/dns.peer\n member: serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com\n dns:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: dns.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: compute.googleapis.com\n network:\n type: gcp:compute:Network\n properties:\n project: ${targetProject.projectId}\n name: test\n autoCreateSubnetworks: false\n options:\n dependsOn:\n - ${compute}\n zone:\n type: gcp:dns:ManagedZone\n properties:\n name: tf-test-dns_56529\n dnsName: private_75413.example.com.\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${network.id}\n options:\n dependsOn:\n - ${dns}\n testmanagedzone:\n type: gcp:integrationconnectors:ManagedZone\n properties:\n name: test\n description: tf created description\n labels:\n intent: example\n targetProject: ${targetProject.projectId}\n targetVpc: test\n dns: ${zone.dnsName}\n options:\n dependsOn:\n - ${dnsPeerBinding}\n - ${zone}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedZone can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/managedZones/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ManagedZone can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default projects/{{project}}/locations/global/managedZones/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{name}}\n```\n\n", + "description": "An Integration connectors Managed Zone.\n\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/integration-connectors/docs/reference/rest/v1/projects.locations.global.managedZones)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/integration-connectors/docs)\n\n## Example Usage\n\n### Integration Connectors Managed Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst targetProject = new gcp.organizations.Project(\"target_project\", {\n projectId: \"tf-test_79169\",\n name: \"tf-test_56529\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst testProject = gcp.organizations.getProject({});\nconst dnsPeerBinding = new gcp.projects.IAMMember(\"dns_peer_binding\", {\n project: targetProject.projectId,\n role: \"roles/dns.peer\",\n member: testProject.then(testProject =\u003e `serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com`),\n});\nconst dns = new gcp.projects.Service(\"dns\", {\n project: targetProject.projectId,\n service: \"dns.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: targetProject.projectId,\n service: \"compute.googleapis.com\",\n});\nconst network = new gcp.compute.Network(\"network\", {\n project: targetProject.projectId,\n name: \"test\",\n autoCreateSubnetworks: false,\n}, {\n dependsOn: [compute],\n});\nconst zone = new gcp.dns.ManagedZone(\"zone\", {\n name: \"tf-test-dns_75413\",\n dnsName: \"private_55138.example.com.\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network.id,\n }],\n },\n}, {\n dependsOn: [dns],\n});\nconst testmanagedzone = new gcp.integrationconnectors.ManagedZone(\"testmanagedzone\", {\n name: \"test\",\n description: \"tf created description\",\n labels: {\n intent: \"example\",\n },\n targetProject: targetProject.projectId,\n targetVpc: \"test\",\n dns: zone.dnsName,\n}, {\n dependsOn: [\n dnsPeerBinding,\n zone,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_project = gcp.organizations.Project(\"target_project\",\n project_id=\"tf-test_79169\",\n name=\"tf-test_56529\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_project = gcp.organizations.get_project()\ndns_peer_binding = gcp.projects.IAMMember(\"dns_peer_binding\",\n project=target_project.project_id,\n role=\"roles/dns.peer\",\n member=f\"serviceAccount:service-{test_project.number}@gcp-sa-connectors.iam.gserviceaccount.com\")\ndns = gcp.projects.Service(\"dns\",\n project=target_project.project_id,\n service=\"dns.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=target_project.project_id,\n service=\"compute.googleapis.com\")\nnetwork = gcp.compute.Network(\"network\",\n project=target_project.project_id,\n name=\"test\",\n auto_create_subnetworks=False,\n opts = pulumi.ResourceOptions(depends_on=[compute]))\nzone = gcp.dns.ManagedZone(\"zone\",\n name=\"tf-test-dns_75413\",\n dns_name=\"private_55138.example.com.\",\n visibility=\"private\",\n private_visibility_config={\n \"networks\": [{\n \"network_url\": network.id,\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[dns]))\ntestmanagedzone = gcp.integrationconnectors.ManagedZone(\"testmanagedzone\",\n name=\"test\",\n description=\"tf created description\",\n labels={\n \"intent\": \"example\",\n },\n target_project=target_project.project_id,\n target_vpc=\"test\",\n dns=zone.dns_name,\n opts = pulumi.ResourceOptions(depends_on=[\n dns_peer_binding,\n zone,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var targetProject = new Gcp.Organizations.Project(\"target_project\", new()\n {\n ProjectId = \"tf-test_79169\",\n Name = \"tf-test_56529\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var dnsPeerBinding = new Gcp.Projects.IAMMember(\"dns_peer_binding\", new()\n {\n Project = targetProject.ProjectId,\n Role = \"roles/dns.peer\",\n Member = $\"serviceAccount:service-{testProject.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-connectors.iam.gserviceaccount.com\",\n });\n\n var dns = new Gcp.Projects.Service(\"dns\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"dns.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = targetProject.ProjectId,\n Name = \"test\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n compute,\n },\n });\n\n var zone = new Gcp.Dns.ManagedZone(\"zone\", new()\n {\n Name = \"tf-test-dns_75413\",\n DnsName = \"private_55138.example.com.\",\n Visibility = \"private\",\n PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs\n {\n Networks = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network.Id,\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dns,\n },\n });\n\n var testmanagedzone = new Gcp.IntegrationConnectors.ManagedZone(\"testmanagedzone\", new()\n {\n Name = \"test\",\n Description = \"tf created description\",\n Labels = \n {\n { \"intent\", \"example\" },\n },\n TargetProject = targetProject.ProjectId,\n TargetVpc = \"test\",\n Dns = zone.DnsName,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dnsPeerBinding,\n zone,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/integrationconnectors\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttargetProject, err := organizations.NewProject(ctx, \"target_project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_79169\"),\n\t\t\tName: pulumi.String(\"tf-test_56529\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdnsPeerBinding, err := projects.NewIAMMember(ctx, \"dns_peer_binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tRole: pulumi.String(\"roles/dns.peer\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdns, err := projects.NewService(ctx, \"dns\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"dns.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcompute, err := projects.NewService(ctx, \"compute\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"compute.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcompute,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tzone, err := dns.NewManagedZone(ctx, \"zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"tf-test-dns_75413\"),\n\t\t\tDnsName: pulumi.String(\"private_55138.example.com.\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tPrivateVisibilityConfig: \u0026dns.ManagedZonePrivateVisibilityConfigArgs{\n\t\t\t\tNetworks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdns,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = integrationconnectors.NewManagedZone(ctx, \"testmanagedzone\", \u0026integrationconnectors.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"tf created description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"intent\": pulumi.String(\"example\"),\n\t\t\t},\n\t\t\tTargetProject: targetProject.ProjectId,\n\t\t\tTargetVpc: pulumi.String(\"test\"),\n\t\t\tDns: zone.DnsName,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdnsPeerBinding,\n\t\t\tzone,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.integrationconnectors.ManagedZone;\nimport com.pulumi.gcp.integrationconnectors.ManagedZoneArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var targetProject = new Project(\"targetProject\", ProjectArgs.builder()\n .projectId(\"tf-test_79169\")\n .name(\"tf-test_56529\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n final var testProject = OrganizationsFunctions.getProject();\n\n var dnsPeerBinding = new IAMMember(\"dnsPeerBinding\", IAMMemberArgs.builder()\n .project(targetProject.projectId())\n .role(\"roles/dns.peer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var dns = new Service(\"dns\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"dns.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .project(targetProject.projectId())\n .name(\"test\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var zone = new ManagedZone(\"zone\", ManagedZoneArgs.builder()\n .name(\"tf-test-dns_75413\")\n .dnsName(\"private_55138.example.com.\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(dns)\n .build());\n\n var testmanagedzone = new ManagedZone(\"testmanagedzone\", ManagedZoneArgs.builder()\n .name(\"test\")\n .description(\"tf created description\")\n .labels(Map.of(\"intent\", \"example\"))\n .targetProject(targetProject.projectId())\n .targetVpc(\"test\")\n .dns(zone.dnsName())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n dnsPeerBinding,\n zone)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n targetProject:\n type: gcp:organizations:Project\n name: target_project\n properties:\n projectId: tf-test_79169\n name: tf-test_56529\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n dnsPeerBinding:\n type: gcp:projects:IAMMember\n name: dns_peer_binding\n properties:\n project: ${targetProject.projectId}\n role: roles/dns.peer\n member: serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com\n dns:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: dns.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: compute.googleapis.com\n network:\n type: gcp:compute:Network\n properties:\n project: ${targetProject.projectId}\n name: test\n autoCreateSubnetworks: false\n options:\n dependsOn:\n - ${compute}\n zone:\n type: gcp:dns:ManagedZone\n properties:\n name: tf-test-dns_75413\n dnsName: private_55138.example.com.\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${network.id}\n options:\n dependsOn:\n - ${dns}\n testmanagedzone:\n type: gcp:integrationconnectors:ManagedZone\n properties:\n name: test\n description: tf created description\n labels:\n intent: example\n targetProject: ${targetProject.projectId}\n targetVpc: test\n dns: ${zone.dnsName}\n options:\n dependsOn:\n - ${dnsPeerBinding}\n - ${zone}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedZone can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/managedZones/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ManagedZone can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default projects/{{project}}/locations/global/managedZones/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{name}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -247292,7 +249061,7 @@ } }, "gcp:networkconnectivity/spoke:Spoke": { - "description": "The NetworkConnectivity Spoke resource\n\n\nTo get more information about Spoke, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1beta/projects.locations.spokes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/overview)\n\n## Example Usage\n\n### Network Connectivity Spoke Linked Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: spoke1\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Vpc Network Group\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1-spoke\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst defaultGroup = new gcp.networkconnectivity.Group(\"default_group\", {\n hub: basicHub.id,\n name: \"default\",\n description: \"A sample hub group\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"group-spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked VPC\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n group: defaultGroup.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1-spoke\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\ndefault_group = gcp.networkconnectivity.Group(\"default_group\",\n hub=basic_hub.id,\n name=\"default\",\n description=\"A sample hub group\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"group-spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked VPC\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n },\n group=default_group.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 = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1-spoke\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var defaultGroup = new Gcp.NetworkConnectivity.Group(\"default_group\", new()\n {\n Hub = basicHub.Id,\n Name = \"default\",\n Description = \"A sample hub group\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"group-spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked VPC\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n Group = defaultGroup.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1-spoke\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGroup, err := networkconnectivity.NewGroup(ctx, \"default_group\", \u0026networkconnectivity.GroupArgs{\n\t\t\tHub: basicHub.ID(),\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tDescription: pulumi.String(\"A sample hub group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"group-spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPC\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t\tGroup: defaultGroup.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.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Group;\nimport com.pulumi.gcp.networkconnectivity.GroupArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1-spoke\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var defaultGroup = new Group(\"defaultGroup\", GroupArgs.builder()\n .hub(basicHub.id())\n .name(\"default\")\n .description(\"A sample hub group\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"group-spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked VPC\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .group(defaultGroup.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1-spoke\n description: A sample hub\n labels:\n label-two: value-one\n defaultGroup:\n type: gcp:networkconnectivity:Group\n name: default_group\n properties:\n hub: ${basicHub.id}\n name: default\n description: A sample hub group\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: group-spoke1\n location: global\n description: A sample spoke with a linked VPC\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n group: ${defaultGroup.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Router Appliance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-test-network_55138\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"tf-test-subnet_37559\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"tf-test-instance_91980\",\n machineType: \"e2-medium\",\n canIpForward: true,\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n networkInterfaces: [{\n subnetwork: subnetwork.name,\n networkIp: \"10.0.0.2\",\n accessConfigs: [{\n networkTier: \"PREMIUM\",\n }],\n }],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"tf-test-hub_37118\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"tf-test-name_80332\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked routher appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: \"10.0.0.2\",\n }],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-test-network_55138\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"tf-test-subnet_37559\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ninstance = gcp.compute.Instance(\"instance\",\n name=\"tf-test-instance_91980\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n network_interfaces=[{\n \"subnetwork\": subnetwork.name,\n \"network_ip\": \"10.0.0.2\",\n \"access_configs\": [{\n \"network_tier\": \"PREMIUM\",\n }],\n }])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"tf-test-hub_37118\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"tf-test-name_80332\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked routher appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_router_appliance_instances={\n \"instances\": [{\n \"virtual_machine\": instance.self_link,\n \"ip_address\": \"10.0.0.2\",\n }],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-test-network_55138\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"tf-test-subnet_37559\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"tf-test-instance_91980\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Subnetwork = subnetwork.Name,\n NetworkIp = \"10.0.0.2\",\n AccessConfigs = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceAccessConfigArgs\n {\n NetworkTier = \"PREMIUM\",\n },\n },\n },\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"tf-test-hub_37118\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"tf-test-name_80332\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked routher appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = \"10.0.0.2\",\n },\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-network_55138\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-subnet_37559\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"tf-test-instance_91980\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(true),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tSubnetwork: subnetwork.Name,\n\t\t\t\t\tNetworkIp: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{\n\t\t\t\t\t\t\tNetworkTier: pulumi.String(\"PREMIUM\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"tf-test-hub_37118\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"tf-test-name_80332\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked routher appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\n\t\t\t\tInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\t\t\t\t\t\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\n\t\t\t\t\t\tVirtualMachine: instance.SelfLink,\n\t\t\t\t\t\tIpAddress: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-test-network_55138\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"tf-test-subnet_37559\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .name(\"tf-test-instance_91980\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .subnetwork(subnetwork.name())\n .networkIp(\"10.0.0.2\")\n .accessConfigs(InstanceNetworkInterfaceAccessConfigArgs.builder()\n .networkTier(\"PREMIUM\")\n .build())\n .build())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"tf-test-hub_37118\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"tf-test-name_80332\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked routher appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(\"10.0.0.2\")\n .build())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-test-network_55138\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: tf-test-subnet_37559\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n instance:\n type: gcp:compute:Instance\n properties:\n name: tf-test-instance_91980\n machineType: e2-medium\n canIpForward: true\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: projects/debian-cloud/global/images/debian-10-buster-v20210817\n networkInterfaces:\n - subnetwork: ${subnetwork.name}\n networkIp: 10.0.0.2\n accessConfigs:\n - networkTier: PREMIUM\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: tf-test-hub_37118\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: tf-test-name_80332\n location: us-central1\n description: A sample spoke with a linked routher appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: 10.0.0.2\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Vpn Tunnel Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"basic-subnetwork\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst gateway = new gcp.compute.HaVpnGateway(\"gateway\", {\n name: \"vpn-gateway\",\n network: network.id,\n});\nconst externalVpnGw = new gcp.compute.ExternalVpnGateway(\"external_vpn_gw\", {\n name: \"external-vpn-gateway\",\n redundancyType: \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description: \"An externally managed VPN gateway\",\n interfaces: [{\n id: 0,\n ipAddress: \"8.8.8.8\",\n }],\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n name: \"tunnel1\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n name: \"tunnel2\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router.id}`,\n vpnGatewayInterface: 1,\n});\nconst routerInterface1 = new gcp.compute.RouterInterface(\"router_interface1\", {\n name: \"router-interface1\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst routerPeer1 = new gcp.compute.RouterPeer(\"router_peer1\", {\n name: \"router-peer1\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface1.name,\n});\nconst routerInterface2 = new gcp.compute.RouterInterface(\"router_interface2\", {\n name: \"router-interface2\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst routerPeer2 = new gcp.compute.RouterPeer(\"router_peer2\", {\n name: \"router-peer2\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface2.name,\n});\nconst tunnel1Spoke = new gcp.networkconnectivity.Spoke(\"tunnel1\", {\n name: \"vpn-tunnel-1-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel1.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\nconst tunnel2Spoke = new gcp.networkconnectivity.Spoke(\"tunnel2\", {\n name: \"vpn-tunnel-2-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel2.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"basic-subnetwork\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ngateway = gcp.compute.HaVpnGateway(\"gateway\",\n name=\"vpn-gateway\",\n network=network.id)\nexternal_vpn_gw = gcp.compute.ExternalVpnGateway(\"external_vpn_gw\",\n name=\"external-vpn-gateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[{\n \"id\": 0,\n \"ip_address\": \"8.8.8.8\",\n }])\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 64514,\n })\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n name=\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n name=\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter_interface1 = gcp.compute.RouterInterface(\"router_interface1\",\n name=\"router-interface1\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter_peer1 = gcp.compute.RouterPeer(\"router_peer1\",\n name=\"router-peer1\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface1.name)\nrouter_interface2 = gcp.compute.RouterInterface(\"router_interface2\",\n name=\"router-interface2\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter_peer2 = gcp.compute.RouterPeer(\"router_peer2\",\n name=\"router-peer2\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface2.name)\ntunnel1_spoke = gcp.networkconnectivity.Spoke(\"tunnel1\",\n name=\"vpn-tunnel-1-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel1.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\ntunnel2_spoke = gcp.networkconnectivity.Spoke(\"tunnel2\",\n name=\"vpn-tunnel-2-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel2.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"basic-subnetwork\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var gateway = new Gcp.Compute.HaVpnGateway(\"gateway\", new()\n {\n Name = \"vpn-gateway\",\n Network = network.Id,\n });\n\n var externalVpnGw = new Gcp.Compute.ExternalVpnGateway(\"external_vpn_gw\", new()\n {\n Name = \"external-vpn-gateway\",\n RedundancyType = \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n Description = \"An externally managed VPN gateway\",\n Interfaces = new[]\n {\n new Gcp.Compute.Inputs.ExternalVpnGatewayInterfaceArgs\n {\n Id = 0,\n IpAddress = \"8.8.8.8\",\n },\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n Name = \"tunnel1\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Name = \"tunnel2\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var routerInterface1 = new Gcp.Compute.RouterInterface(\"router_interface1\", new()\n {\n Name = \"router-interface1\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var routerPeer1 = new Gcp.Compute.RouterPeer(\"router_peer1\", new()\n {\n Name = \"router-peer1\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface1.Name,\n });\n\n var routerInterface2 = new Gcp.Compute.RouterInterface(\"router_interface2\", new()\n {\n Name = \"router-interface2\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var routerPeer2 = new Gcp.Compute.RouterPeer(\"router_peer2\", new()\n {\n Name = \"router-peer2\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface2.Name,\n });\n\n var tunnel1Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel1\", new()\n {\n Name = \"vpn-tunnel-1-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel1.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n var tunnel2Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel2\", new()\n {\n Name = \"vpn-tunnel-2-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel2.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"basic-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgateway, err := compute.NewHaVpnGateway(ctx, \"gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"vpn-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalVpnGw, err := compute.NewExternalVpnGateway(ctx, \"external_vpn_gw\", \u0026compute.ExternalVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRedundancyType: pulumi.String(\"SINGLE_IP_INTERNALLY_REDUNDANT\"),\n\t\t\tDescription: pulumi.String(\"An externally managed VPN gateway\"),\n\t\t\tInterfaces: compute.ExternalVpnGatewayInterfaceArray{\n\t\t\t\t\u0026compute.ExternalVpnGatewayInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tIpAddress: pulumi.String(\"8.8.8.8\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(64514),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel1, err := compute.NewVPNTunnel(ctx, \"tunnel1\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID(),\n\t\t\tVpnGatewayInterface: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel2, err := compute.NewVPNTunnel(ctx, \"tunnel2\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel2\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\" %v\", id), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tVpnGatewayInterface: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface1, err := compute.NewRouterInterface(ctx, \"router_interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.0.1/30\"),\n\t\t\tVpnTunnel: tunnel1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.0.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface2, err := compute.NewRouterInterface(ctx, \"router_interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.1.1/30\"),\n\t\t\tVpnTunnel: tunnel2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel1\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-1-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel1.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel2\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-2-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel2.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.ExternalVpnGateway;\nimport com.pulumi.gcp.compute.ExternalVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.ExternalVpnGatewayInterfaceArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpnTunnelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"basic-subnetwork\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var gateway = new HaVpnGateway(\"gateway\", HaVpnGatewayArgs.builder()\n .name(\"vpn-gateway\")\n .network(network.id())\n .build());\n\n var externalVpnGw = new ExternalVpnGateway(\"externalVpnGw\", ExternalVpnGatewayArgs.builder()\n .name(\"external-vpn-gateway\")\n .redundancyType(\"SINGLE_IP_INTERNALLY_REDUNDANT\")\n .description(\"An externally managed VPN gateway\")\n .interfaces(ExternalVpnGatewayInterfaceArgs.builder()\n .id(0)\n .ipAddress(\"8.8.8.8\")\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder()\n .name(\"tunnel1\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder()\n .name(\"tunnel2\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var routerInterface1 = new RouterInterface(\"routerInterface1\", RouterInterfaceArgs.builder()\n .name(\"router-interface1\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var routerPeer1 = new RouterPeer(\"routerPeer1\", RouterPeerArgs.builder()\n .name(\"router-peer1\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface1.name())\n .build());\n\n var routerInterface2 = new RouterInterface(\"routerInterface2\", RouterInterfaceArgs.builder()\n .name(\"router-interface2\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var routerPeer2 = new RouterPeer(\"routerPeer2\", RouterPeerArgs.builder()\n .name(\"router-peer2\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface2.name())\n .build());\n\n var tunnel1Spoke = new Spoke(\"tunnel1Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-1-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel1.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n var tunnel2Spoke = new Spoke(\"tunnel2Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-2-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel2.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: basic-subnetwork\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n name: vpn-gateway\n network: ${network.id}\n externalVpnGw:\n type: gcp:compute:ExternalVpnGateway\n name: external_vpn_gw\n properties:\n name: external-vpn-gateway\n redundancyType: SINGLE_IP_INTERNALLY_REDUNDANT\n description: An externally managed VPN gateway\n interfaces:\n - id: 0\n ipAddress: 8.8.8.8\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel1\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel2\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router.id}'\n vpnGatewayInterface: 1\n routerInterface1:\n type: gcp:compute:RouterInterface\n name: router_interface1\n properties:\n name: router-interface1\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n routerPeer1:\n type: gcp:compute:RouterPeer\n name: router_peer1\n properties:\n name: router-peer1\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface1.name}\n routerInterface2:\n type: gcp:compute:RouterInterface\n name: router_interface2\n properties:\n name: router-interface2\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n routerPeer2:\n type: gcp:compute:RouterPeer\n name: router_peer2\n properties:\n name: router-peer2\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface2.name}\n tunnel1Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel1\n properties:\n name: vpn-tunnel-1-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel1.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n tunnel2Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel2\n properties:\n name: vpn-tunnel-2-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel2.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Interconnect Attachment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst interconnect_attachment = new gcp.compute.InterconnectAttachment(\"interconnect-attachment\", {\n name: \"partner-interconnect1\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n region: \"us-central1\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"interconnect-attachment-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked Interconnect Attachment\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedInterconnectAttachments: {\n uris: [interconnect_attachment.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\ninterconnect_attachment = gcp.compute.InterconnectAttachment(\"interconnect-attachment\",\n name=\"partner-interconnect1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\",\n region=\"us-central1\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"interconnect-attachment-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked Interconnect Attachment\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_interconnect_attachments={\n \"uris\": [interconnect_attachment.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var interconnect_attachment = new Gcp.Compute.InterconnectAttachment(\"interconnect-attachment\", new()\n {\n Name = \"partner-interconnect1\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n Region = \"us-central1\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"interconnect-attachment-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked Interconnect Attachment\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs\n {\n Uris = new[]\n {\n interconnect_attachment.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInterconnectAttachment(ctx, \"interconnect-attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"partner-interconnect1\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"interconnect-attachment-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked Interconnect Attachment\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedInterconnectAttachments: \u0026networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\tinterconnect_attachment.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedInterconnectAttachmentsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var interconnect_attachment = new InterconnectAttachment(\"interconnect-attachment\", InterconnectAttachmentArgs.builder()\n .name(\"partner-interconnect1\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .region(\"us-central1\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"interconnect-attachment-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked Interconnect Attachment\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()\n .uris(interconnect_attachment.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 16550\n interconnect-attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: partner-interconnect1\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\n region: us-central1\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: interconnect-attachment-spoke\n location: us-central1\n description: A sample spoke with a linked Interconnect Attachment\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedInterconnectAttachments:\n uris:\n - ${[\"interconnect-attachment\"].selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Producer Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst address = new gcp.compute.GlobalAddress(\"address\", {\n name: \"test-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: network.id,\n});\nconst peering = new gcp.servicenetworking.Connection(\"peering\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [address.name],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {name: \"hub-basic\"});\nconst linkedVpcSpoke = new gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\", {\n name: \"vpc-spoke\",\n location: \"global\",\n hub: basicHub.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"producer-spoke\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedProducerVpcNetwork: {\n network: network.name,\n peering: peering.peering,\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n}, {\n dependsOn: [linkedVpcSpoke],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\naddress = gcp.compute.GlobalAddress(\"address\",\n name=\"test-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=network.id)\npeering = gcp.servicenetworking.Connection(\"peering\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[address.name])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\", name=\"hub-basic\")\nlinked_vpc_spoke = gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\",\n name=\"vpc-spoke\",\n location=\"global\",\n hub=basic_hub.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"producer-spoke\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_producer_vpc_network={\n \"network\": network.name,\n \"peering\": peering.peering,\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n opts = pulumi.ResourceOptions(depends_on=[linked_vpc_spoke]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var address = new Gcp.Compute.GlobalAddress(\"address\", new()\n {\n Name = \"test-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = network.Id,\n });\n\n var peering = new Gcp.ServiceNetworking.Connection(\"peering\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n address.Name,\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub-basic\",\n });\n\n var linkedVpcSpoke = new Gcp.NetworkConnectivity.Spoke(\"linked_vpc_spoke\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"producer-spoke\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs\n {\n Network = network.Name,\n Peering = peering.Peering,\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n linkedVpcSpoke,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress, err := compute.NewGlobalAddress(ctx, \"address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"test-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpeering, err := servicenetworking.NewConnection(ctx, \"peering\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\taddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlinkedVpcSpoke, err := networkconnectivity.NewSpoke(ctx, \"linked_vpc_spoke\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"producer-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedProducerVpcNetwork: \u0026networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{\n\t\t\t\tNetwork: network.Name,\n\t\t\t\tPeering: peering.Peering,\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlinkedVpcSpoke,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedProducerVpcNetworkArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var address = new GlobalAddress(\"address\", GlobalAddressArgs.builder()\n .name(\"test-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(network.id())\n .build());\n\n var peering = new Connection(\"peering\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(address.name())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .build());\n\n var linkedVpcSpoke = new Spoke(\"linkedVpcSpoke\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"producer-spoke\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()\n .network(network.name())\n .peering(peering.peering())\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(linkedVpcSpoke)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n address:\n type: gcp:compute:GlobalAddress\n properties:\n name: test-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${network.id}\n peering:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${address.name}\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub-basic\n linkedVpcSpoke:\n type: gcp:networkconnectivity:Spoke\n name: linked_vpc_spoke\n properties:\n name: vpc-spoke\n location: global\n hub: ${basicHub.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: producer-spoke\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedProducerVpcNetwork:\n network: ${network.name}\n peering: ${peering.peering}\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n options:\n dependsOn:\n - ${linkedVpcSpoke}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Center Group\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-net\",\n autoCreateSubnetworks: false,\n});\nconst starHub = new gcp.networkconnectivity.Hub(\"star_hub\", {\n name: \"hub-basic\",\n presetTopology: \"STAR\",\n});\nconst centerGroup = new gcp.networkconnectivity.Group(\"center_group\", {\n name: \"center\",\n hub: starHub.id,\n autoAccept: {\n autoAcceptProjects: [\n \"foo_13293\",\n \"bar_40289\",\n ],\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"vpc-spoke\",\n location: \"global\",\n description: \"A sample spoke\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: starHub.id,\n group: centerGroup.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-net\",\n auto_create_subnetworks=False)\nstar_hub = gcp.networkconnectivity.Hub(\"star_hub\",\n name=\"hub-basic\",\n preset_topology=\"STAR\")\ncenter_group = gcp.networkconnectivity.Group(\"center_group\",\n name=\"center\",\n hub=star_hub.id,\n auto_accept={\n \"auto_accept_projects\": [\n \"foo_13293\",\n \"bar_40289\",\n ],\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"vpc-spoke\",\n location=\"global\",\n description=\"A sample spoke\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=star_hub.id,\n group=center_group.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-net\",\n AutoCreateSubnetworks = false,\n });\n\n var starHub = new Gcp.NetworkConnectivity.Hub(\"star_hub\", new()\n {\n Name = \"hub-basic\",\n PresetTopology = \"STAR\",\n });\n\n var centerGroup = new Gcp.NetworkConnectivity.Group(\"center_group\", new()\n {\n Name = \"center\",\n Hub = starHub.Id,\n AutoAccept = new Gcp.NetworkConnectivity.Inputs.GroupAutoAcceptArgs\n {\n AutoAcceptProjects = new[]\n {\n \"foo_13293\",\n \"bar_40289\",\n },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Description = \"A sample spoke\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = starHub.Id,\n Group = centerGroup.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstarHub, err := networkconnectivity.NewHub(ctx, \"star_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t\tPresetTopology: pulumi.String(\"STAR\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcenterGroup, err := networkconnectivity.NewGroup(ctx, \"center_group\", \u0026networkconnectivity.GroupArgs{\n\t\t\tName: pulumi.String(\"center\"),\n\t\t\tHub: starHub.ID(),\n\t\t\tAutoAccept: \u0026networkconnectivity.GroupAutoAcceptArgs{\n\t\t\t\tAutoAcceptProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"foo_13293\"),\n\t\t\t\t\tpulumi.String(\"bar_40289\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: starHub.ID(),\n\t\t\tGroup: centerGroup.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Group;\nimport com.pulumi.gcp.networkconnectivity.GroupArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.GroupAutoAcceptArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var starHub = new Hub(\"starHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .presetTopology(\"STAR\")\n .build());\n\n var centerGroup = new Group(\"centerGroup\", GroupArgs.builder()\n .name(\"center\")\n .hub(starHub.id())\n .autoAccept(GroupAutoAcceptArgs.builder()\n .autoAcceptProjects( \n \"foo_13293\",\n \"bar_40289\")\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .description(\"A sample spoke\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(starHub.id())\n .group(centerGroup.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-net\n autoCreateSubnetworks: false\n starHub:\n type: gcp:networkconnectivity:Hub\n name: star_hub\n properties:\n name: hub-basic\n presetTopology: STAR\n centerGroup:\n type: gcp:networkconnectivity:Group\n name: center_group\n properties:\n name: center\n hub: ${starHub.id}\n autoAccept:\n autoAcceptProjects:\n - foo_13293\n - bar_40289\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: vpc-spoke\n location: global\n description: A sample spoke\n labels:\n label-one: value-one\n hub: ${starHub.id}\n group: ${centerGroup.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSpoke can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/spokes/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Spoke can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default projects/{{project}}/locations/{{location}}/spokes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{location}}/{{name}}\n```\n\n", + "description": "The NetworkConnectivity Spoke resource\n\n\nTo get more information about Spoke, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1beta/projects.locations.spokes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/overview)\n\n## Example Usage\n\n### Network Connectivity Spoke Linked Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: spoke1\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Vpc Network Group\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1-spoke\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst defaultGroup = new gcp.networkconnectivity.Group(\"default_group\", {\n hub: basicHub.id,\n name: \"default\",\n description: \"A sample hub group\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"group-spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked VPC\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n group: defaultGroup.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1-spoke\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\ndefault_group = gcp.networkconnectivity.Group(\"default_group\",\n hub=basic_hub.id,\n name=\"default\",\n description=\"A sample hub group\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"group-spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked VPC\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n },\n group=default_group.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 = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1-spoke\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var defaultGroup = new Gcp.NetworkConnectivity.Group(\"default_group\", new()\n {\n Hub = basicHub.Id,\n Name = \"default\",\n Description = \"A sample hub group\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"group-spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked VPC\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n Group = defaultGroup.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1-spoke\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGroup, err := networkconnectivity.NewGroup(ctx, \"default_group\", \u0026networkconnectivity.GroupArgs{\n\t\t\tHub: basicHub.ID(),\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tDescription: pulumi.String(\"A sample hub group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"group-spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPC\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t\tGroup: defaultGroup.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.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Group;\nimport com.pulumi.gcp.networkconnectivity.GroupArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1-spoke\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var defaultGroup = new Group(\"defaultGroup\", GroupArgs.builder()\n .hub(basicHub.id())\n .name(\"default\")\n .description(\"A sample hub group\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"group-spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked VPC\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .group(defaultGroup.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1-spoke\n description: A sample hub\n labels:\n label-two: value-one\n defaultGroup:\n type: gcp:networkconnectivity:Group\n name: default_group\n properties:\n hub: ${basicHub.id}\n name: default\n description: A sample hub group\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: group-spoke1\n location: global\n description: A sample spoke with a linked VPC\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n group: ${defaultGroup.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Router Appliance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-test-network_37559\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"tf-test-subnet_91980\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"tf-test-instance_37118\",\n machineType: \"e2-medium\",\n canIpForward: true,\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n networkInterfaces: [{\n subnetwork: subnetwork.name,\n networkIp: \"10.0.0.2\",\n accessConfigs: [{\n networkTier: \"PREMIUM\",\n }],\n }],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"tf-test-hub_80332\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"tf-test-name_13293\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked routher appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: \"10.0.0.2\",\n }],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-test-network_37559\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"tf-test-subnet_91980\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ninstance = gcp.compute.Instance(\"instance\",\n name=\"tf-test-instance_37118\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n network_interfaces=[{\n \"subnetwork\": subnetwork.name,\n \"network_ip\": \"10.0.0.2\",\n \"access_configs\": [{\n \"network_tier\": \"PREMIUM\",\n }],\n }])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"tf-test-hub_80332\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"tf-test-name_13293\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked routher appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_router_appliance_instances={\n \"instances\": [{\n \"virtual_machine\": instance.self_link,\n \"ip_address\": \"10.0.0.2\",\n }],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-test-network_37559\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"tf-test-subnet_91980\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"tf-test-instance_37118\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Subnetwork = subnetwork.Name,\n NetworkIp = \"10.0.0.2\",\n AccessConfigs = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceAccessConfigArgs\n {\n NetworkTier = \"PREMIUM\",\n },\n },\n },\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"tf-test-hub_80332\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"tf-test-name_13293\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked routher appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = \"10.0.0.2\",\n },\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-network_37559\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-subnet_91980\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"tf-test-instance_37118\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(true),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tSubnetwork: subnetwork.Name,\n\t\t\t\t\tNetworkIp: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{\n\t\t\t\t\t\t\tNetworkTier: pulumi.String(\"PREMIUM\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"tf-test-hub_80332\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"tf-test-name_13293\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked routher appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\n\t\t\t\tInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\t\t\t\t\t\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\n\t\t\t\t\t\tVirtualMachine: instance.SelfLink,\n\t\t\t\t\t\tIpAddress: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-test-network_37559\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"tf-test-subnet_91980\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .name(\"tf-test-instance_37118\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .subnetwork(subnetwork.name())\n .networkIp(\"10.0.0.2\")\n .accessConfigs(InstanceNetworkInterfaceAccessConfigArgs.builder()\n .networkTier(\"PREMIUM\")\n .build())\n .build())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"tf-test-hub_80332\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"tf-test-name_13293\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked routher appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(\"10.0.0.2\")\n .build())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-test-network_37559\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: tf-test-subnet_91980\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n instance:\n type: gcp:compute:Instance\n properties:\n name: tf-test-instance_37118\n machineType: e2-medium\n canIpForward: true\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: projects/debian-cloud/global/images/debian-10-buster-v20210817\n networkInterfaces:\n - subnetwork: ${subnetwork.name}\n networkIp: 10.0.0.2\n accessConfigs:\n - networkTier: PREMIUM\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: tf-test-hub_80332\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: tf-test-name_13293\n location: us-central1\n description: A sample spoke with a linked routher appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: 10.0.0.2\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Vpn Tunnel Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"basic-subnetwork\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst gateway = new gcp.compute.HaVpnGateway(\"gateway\", {\n name: \"vpn-gateway\",\n network: network.id,\n});\nconst externalVpnGw = new gcp.compute.ExternalVpnGateway(\"external_vpn_gw\", {\n name: \"external-vpn-gateway\",\n redundancyType: \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description: \"An externally managed VPN gateway\",\n interfaces: [{\n id: 0,\n ipAddress: \"8.8.8.8\",\n }],\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n name: \"tunnel1\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n name: \"tunnel2\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router.id}`,\n vpnGatewayInterface: 1,\n});\nconst routerInterface1 = new gcp.compute.RouterInterface(\"router_interface1\", {\n name: \"router-interface1\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst routerPeer1 = new gcp.compute.RouterPeer(\"router_peer1\", {\n name: \"router-peer1\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface1.name,\n});\nconst routerInterface2 = new gcp.compute.RouterInterface(\"router_interface2\", {\n name: \"router-interface2\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst routerPeer2 = new gcp.compute.RouterPeer(\"router_peer2\", {\n name: \"router-peer2\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface2.name,\n});\nconst tunnel1Spoke = new gcp.networkconnectivity.Spoke(\"tunnel1\", {\n name: \"vpn-tunnel-1-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel1.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\nconst tunnel2Spoke = new gcp.networkconnectivity.Spoke(\"tunnel2\", {\n name: \"vpn-tunnel-2-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel2.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"basic-subnetwork\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ngateway = gcp.compute.HaVpnGateway(\"gateway\",\n name=\"vpn-gateway\",\n network=network.id)\nexternal_vpn_gw = gcp.compute.ExternalVpnGateway(\"external_vpn_gw\",\n name=\"external-vpn-gateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[{\n \"id\": 0,\n \"ip_address\": \"8.8.8.8\",\n }])\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 64514,\n })\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n name=\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n name=\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter_interface1 = gcp.compute.RouterInterface(\"router_interface1\",\n name=\"router-interface1\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter_peer1 = gcp.compute.RouterPeer(\"router_peer1\",\n name=\"router-peer1\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface1.name)\nrouter_interface2 = gcp.compute.RouterInterface(\"router_interface2\",\n name=\"router-interface2\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter_peer2 = gcp.compute.RouterPeer(\"router_peer2\",\n name=\"router-peer2\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface2.name)\ntunnel1_spoke = gcp.networkconnectivity.Spoke(\"tunnel1\",\n name=\"vpn-tunnel-1-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel1.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\ntunnel2_spoke = gcp.networkconnectivity.Spoke(\"tunnel2\",\n name=\"vpn-tunnel-2-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel2.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"basic-subnetwork\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var gateway = new Gcp.Compute.HaVpnGateway(\"gateway\", new()\n {\n Name = \"vpn-gateway\",\n Network = network.Id,\n });\n\n var externalVpnGw = new Gcp.Compute.ExternalVpnGateway(\"external_vpn_gw\", new()\n {\n Name = \"external-vpn-gateway\",\n RedundancyType = \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n Description = \"An externally managed VPN gateway\",\n Interfaces = new[]\n {\n new Gcp.Compute.Inputs.ExternalVpnGatewayInterfaceArgs\n {\n Id = 0,\n IpAddress = \"8.8.8.8\",\n },\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n Name = \"tunnel1\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Name = \"tunnel2\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var routerInterface1 = new Gcp.Compute.RouterInterface(\"router_interface1\", new()\n {\n Name = \"router-interface1\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var routerPeer1 = new Gcp.Compute.RouterPeer(\"router_peer1\", new()\n {\n Name = \"router-peer1\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface1.Name,\n });\n\n var routerInterface2 = new Gcp.Compute.RouterInterface(\"router_interface2\", new()\n {\n Name = \"router-interface2\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var routerPeer2 = new Gcp.Compute.RouterPeer(\"router_peer2\", new()\n {\n Name = \"router-peer2\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface2.Name,\n });\n\n var tunnel1Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel1\", new()\n {\n Name = \"vpn-tunnel-1-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel1.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n var tunnel2Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel2\", new()\n {\n Name = \"vpn-tunnel-2-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel2.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"basic-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgateway, err := compute.NewHaVpnGateway(ctx, \"gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"vpn-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalVpnGw, err := compute.NewExternalVpnGateway(ctx, \"external_vpn_gw\", \u0026compute.ExternalVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRedundancyType: pulumi.String(\"SINGLE_IP_INTERNALLY_REDUNDANT\"),\n\t\t\tDescription: pulumi.String(\"An externally managed VPN gateway\"),\n\t\t\tInterfaces: compute.ExternalVpnGatewayInterfaceArray{\n\t\t\t\t\u0026compute.ExternalVpnGatewayInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tIpAddress: pulumi.String(\"8.8.8.8\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(64514),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel1, err := compute.NewVPNTunnel(ctx, \"tunnel1\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID(),\n\t\t\tVpnGatewayInterface: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel2, err := compute.NewVPNTunnel(ctx, \"tunnel2\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel2\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\" %v\", id), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tVpnGatewayInterface: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface1, err := compute.NewRouterInterface(ctx, \"router_interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.0.1/30\"),\n\t\t\tVpnTunnel: tunnel1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.0.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface2, err := compute.NewRouterInterface(ctx, \"router_interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.1.1/30\"),\n\t\t\tVpnTunnel: tunnel2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel1\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-1-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel1.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel2\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-2-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel2.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.ExternalVpnGateway;\nimport com.pulumi.gcp.compute.ExternalVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.ExternalVpnGatewayInterfaceArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpnTunnelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"basic-subnetwork\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var gateway = new HaVpnGateway(\"gateway\", HaVpnGatewayArgs.builder()\n .name(\"vpn-gateway\")\n .network(network.id())\n .build());\n\n var externalVpnGw = new ExternalVpnGateway(\"externalVpnGw\", ExternalVpnGatewayArgs.builder()\n .name(\"external-vpn-gateway\")\n .redundancyType(\"SINGLE_IP_INTERNALLY_REDUNDANT\")\n .description(\"An externally managed VPN gateway\")\n .interfaces(ExternalVpnGatewayInterfaceArgs.builder()\n .id(0)\n .ipAddress(\"8.8.8.8\")\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder()\n .name(\"tunnel1\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder()\n .name(\"tunnel2\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var routerInterface1 = new RouterInterface(\"routerInterface1\", RouterInterfaceArgs.builder()\n .name(\"router-interface1\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var routerPeer1 = new RouterPeer(\"routerPeer1\", RouterPeerArgs.builder()\n .name(\"router-peer1\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface1.name())\n .build());\n\n var routerInterface2 = new RouterInterface(\"routerInterface2\", RouterInterfaceArgs.builder()\n .name(\"router-interface2\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var routerPeer2 = new RouterPeer(\"routerPeer2\", RouterPeerArgs.builder()\n .name(\"router-peer2\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface2.name())\n .build());\n\n var tunnel1Spoke = new Spoke(\"tunnel1Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-1-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel1.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n var tunnel2Spoke = new Spoke(\"tunnel2Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-2-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel2.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: basic-subnetwork\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n name: vpn-gateway\n network: ${network.id}\n externalVpnGw:\n type: gcp:compute:ExternalVpnGateway\n name: external_vpn_gw\n properties:\n name: external-vpn-gateway\n redundancyType: SINGLE_IP_INTERNALLY_REDUNDANT\n description: An externally managed VPN gateway\n interfaces:\n - id: 0\n ipAddress: 8.8.8.8\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel1\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel2\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router.id}'\n vpnGatewayInterface: 1\n routerInterface1:\n type: gcp:compute:RouterInterface\n name: router_interface1\n properties:\n name: router-interface1\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n routerPeer1:\n type: gcp:compute:RouterPeer\n name: router_peer1\n properties:\n name: router-peer1\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface1.name}\n routerInterface2:\n type: gcp:compute:RouterInterface\n name: router_interface2\n properties:\n name: router-interface2\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n routerPeer2:\n type: gcp:compute:RouterPeer\n name: router_peer2\n properties:\n name: router-peer2\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface2.name}\n tunnel1Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel1\n properties:\n name: vpn-tunnel-1-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel1.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n tunnel2Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel2\n properties:\n name: vpn-tunnel-2-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel2.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Interconnect Attachment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst interconnect_attachment = new gcp.compute.InterconnectAttachment(\"interconnect-attachment\", {\n name: \"partner-interconnect1\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n region: \"us-central1\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"interconnect-attachment-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked Interconnect Attachment\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedInterconnectAttachments: {\n uris: [interconnect_attachment.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\ninterconnect_attachment = gcp.compute.InterconnectAttachment(\"interconnect-attachment\",\n name=\"partner-interconnect1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\",\n region=\"us-central1\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"interconnect-attachment-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked Interconnect Attachment\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_interconnect_attachments={\n \"uris\": [interconnect_attachment.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var interconnect_attachment = new Gcp.Compute.InterconnectAttachment(\"interconnect-attachment\", new()\n {\n Name = \"partner-interconnect1\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n Region = \"us-central1\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"interconnect-attachment-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked Interconnect Attachment\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs\n {\n Uris = new[]\n {\n interconnect_attachment.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInterconnectAttachment(ctx, \"interconnect-attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"partner-interconnect1\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"interconnect-attachment-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked Interconnect Attachment\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedInterconnectAttachments: \u0026networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\tinterconnect_attachment.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedInterconnectAttachmentsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var interconnect_attachment = new InterconnectAttachment(\"interconnect-attachment\", InterconnectAttachmentArgs.builder()\n .name(\"partner-interconnect1\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .region(\"us-central1\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"interconnect-attachment-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked Interconnect Attachment\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()\n .uris(interconnect_attachment.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 16550\n interconnect-attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: partner-interconnect1\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\n region: us-central1\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: interconnect-attachment-spoke\n location: us-central1\n description: A sample spoke with a linked Interconnect Attachment\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedInterconnectAttachments:\n uris:\n - ${[\"interconnect-attachment\"].selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Producer Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst address = new gcp.compute.GlobalAddress(\"address\", {\n name: \"test-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: network.id,\n});\nconst peering = new gcp.servicenetworking.Connection(\"peering\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [address.name],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {name: \"hub-basic\"});\nconst linkedVpcSpoke = new gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\", {\n name: \"vpc-spoke\",\n location: \"global\",\n hub: basicHub.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"producer-spoke\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedProducerVpcNetwork: {\n network: network.name,\n peering: peering.peering,\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n}, {\n dependsOn: [linkedVpcSpoke],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\naddress = gcp.compute.GlobalAddress(\"address\",\n name=\"test-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=network.id)\npeering = gcp.servicenetworking.Connection(\"peering\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[address.name])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\", name=\"hub-basic\")\nlinked_vpc_spoke = gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\",\n name=\"vpc-spoke\",\n location=\"global\",\n hub=basic_hub.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"producer-spoke\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_producer_vpc_network={\n \"network\": network.name,\n \"peering\": peering.peering,\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n opts = pulumi.ResourceOptions(depends_on=[linked_vpc_spoke]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var address = new Gcp.Compute.GlobalAddress(\"address\", new()\n {\n Name = \"test-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = network.Id,\n });\n\n var peering = new Gcp.ServiceNetworking.Connection(\"peering\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n address.Name,\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub-basic\",\n });\n\n var linkedVpcSpoke = new Gcp.NetworkConnectivity.Spoke(\"linked_vpc_spoke\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"producer-spoke\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs\n {\n Network = network.Name,\n Peering = peering.Peering,\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n linkedVpcSpoke,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress, err := compute.NewGlobalAddress(ctx, \"address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"test-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpeering, err := servicenetworking.NewConnection(ctx, \"peering\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\taddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlinkedVpcSpoke, err := networkconnectivity.NewSpoke(ctx, \"linked_vpc_spoke\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"producer-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedProducerVpcNetwork: \u0026networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{\n\t\t\t\tNetwork: network.Name,\n\t\t\t\tPeering: peering.Peering,\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlinkedVpcSpoke,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedProducerVpcNetworkArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var address = new GlobalAddress(\"address\", GlobalAddressArgs.builder()\n .name(\"test-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(network.id())\n .build());\n\n var peering = new Connection(\"peering\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(address.name())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .build());\n\n var linkedVpcSpoke = new Spoke(\"linkedVpcSpoke\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"producer-spoke\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()\n .network(network.name())\n .peering(peering.peering())\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(linkedVpcSpoke)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n address:\n type: gcp:compute:GlobalAddress\n properties:\n name: test-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${network.id}\n peering:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${address.name}\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub-basic\n linkedVpcSpoke:\n type: gcp:networkconnectivity:Spoke\n name: linked_vpc_spoke\n properties:\n name: vpc-spoke\n location: global\n hub: ${basicHub.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: producer-spoke\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedProducerVpcNetwork:\n network: ${network.name}\n peering: ${peering.peering}\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n options:\n dependsOn:\n - ${linkedVpcSpoke}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Center Group\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-net\",\n autoCreateSubnetworks: false,\n});\nconst starHub = new gcp.networkconnectivity.Hub(\"star_hub\", {\n name: \"hub-basic\",\n presetTopology: \"STAR\",\n});\nconst centerGroup = new gcp.networkconnectivity.Group(\"center_group\", {\n name: \"center\",\n hub: starHub.id,\n autoAccept: {\n autoAcceptProjects: [\n \"foo_40289\",\n \"bar_33395\",\n ],\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"vpc-spoke\",\n location: \"global\",\n description: \"A sample spoke\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: starHub.id,\n group: centerGroup.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-net\",\n auto_create_subnetworks=False)\nstar_hub = gcp.networkconnectivity.Hub(\"star_hub\",\n name=\"hub-basic\",\n preset_topology=\"STAR\")\ncenter_group = gcp.networkconnectivity.Group(\"center_group\",\n name=\"center\",\n hub=star_hub.id,\n auto_accept={\n \"auto_accept_projects\": [\n \"foo_40289\",\n \"bar_33395\",\n ],\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"vpc-spoke\",\n location=\"global\",\n description=\"A sample spoke\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=star_hub.id,\n group=center_group.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-net\",\n AutoCreateSubnetworks = false,\n });\n\n var starHub = new Gcp.NetworkConnectivity.Hub(\"star_hub\", new()\n {\n Name = \"hub-basic\",\n PresetTopology = \"STAR\",\n });\n\n var centerGroup = new Gcp.NetworkConnectivity.Group(\"center_group\", new()\n {\n Name = \"center\",\n Hub = starHub.Id,\n AutoAccept = new Gcp.NetworkConnectivity.Inputs.GroupAutoAcceptArgs\n {\n AutoAcceptProjects = new[]\n {\n \"foo_40289\",\n \"bar_33395\",\n },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Description = \"A sample spoke\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = starHub.Id,\n Group = centerGroup.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstarHub, err := networkconnectivity.NewHub(ctx, \"star_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t\tPresetTopology: pulumi.String(\"STAR\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcenterGroup, err := networkconnectivity.NewGroup(ctx, \"center_group\", \u0026networkconnectivity.GroupArgs{\n\t\t\tName: pulumi.String(\"center\"),\n\t\t\tHub: starHub.ID(),\n\t\t\tAutoAccept: \u0026networkconnectivity.GroupAutoAcceptArgs{\n\t\t\t\tAutoAcceptProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"foo_40289\"),\n\t\t\t\t\tpulumi.String(\"bar_33395\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: starHub.ID(),\n\t\t\tGroup: centerGroup.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Group;\nimport com.pulumi.gcp.networkconnectivity.GroupArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.GroupAutoAcceptArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var starHub = new Hub(\"starHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .presetTopology(\"STAR\")\n .build());\n\n var centerGroup = new Group(\"centerGroup\", GroupArgs.builder()\n .name(\"center\")\n .hub(starHub.id())\n .autoAccept(GroupAutoAcceptArgs.builder()\n .autoAcceptProjects( \n \"foo_40289\",\n \"bar_33395\")\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .description(\"A sample spoke\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(starHub.id())\n .group(centerGroup.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-net\n autoCreateSubnetworks: false\n starHub:\n type: gcp:networkconnectivity:Hub\n name: star_hub\n properties:\n name: hub-basic\n presetTopology: STAR\n centerGroup:\n type: gcp:networkconnectivity:Group\n name: center_group\n properties:\n name: center\n hub: ${starHub.id}\n autoAccept:\n autoAcceptProjects:\n - foo_40289\n - bar_33395\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: vpc-spoke\n location: global\n description: A sample spoke\n labels:\n label-one: value-one\n hub: ${starHub.id}\n group: ${centerGroup.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSpoke can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/spokes/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Spoke can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default projects/{{project}}/locations/{{location}}/spokes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{location}}/{{name}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -248705,7 +250474,7 @@ } }, "gcp:networksecurity/authzPolicy:AuthzPolicy": { - "description": "AuthzPolicy is a resource that allows to forward traffic to a callout backend designed to scan the traffic for security purposes.\n\n\nTo get more information about AuthzPolicy, see:\n\n* [API documentation](https://cloud.google.com/load-balancing/docs/reference/network-security/rest/v1beta1/projects.locations.authzPolicies)\n\n## Example Usage\n\n### Network Services Authz Policy Advanced\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"lb-network\",\n project: \"my-project-name\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"backend-subnet\",\n project: \"my-project-name\",\n region: \"us-west1\",\n ipCidrRange: \"10.1.2.0/24\",\n network: _default.id,\n});\nconst proxyOnly = new gcp.compute.Subnetwork(\"proxy_only\", {\n name: \"proxy-only-subnet\",\n project: \"my-project-name\",\n region: \"us-west1\",\n ipCidrRange: \"10.129.0.0/23\",\n purpose: \"REGIONAL_MANAGED_PROXY\",\n role: \"ACTIVE\",\n network: _default.id,\n});\nconst defaultAddress = new gcp.compute.Address(\"default\", {\n name: \"l7-ilb-ip-address\",\n project: \"my-project-name\",\n region: \"us-west1\",\n subnetwork: defaultSubnetwork.id,\n addressType: \"INTERNAL\",\n purpose: \"GCE_ENDPOINT\",\n});\nconst defaultRegionHealthCheck = new gcp.compute.RegionHealthCheck(\"default\", {\n name: \"l7-ilb-basic-check\",\n project: \"my-project-name\",\n region: \"us-west1\",\n httpHealthCheck: {\n portSpecification: \"USE_SERVING_PORT\",\n },\n});\nconst urlMap = new gcp.compute.RegionBackendService(\"url_map\", {\n name: \"l7-ilb-backend-service\",\n project: \"my-project-name\",\n region: \"us-west1\",\n loadBalancingScheme: \"INTERNAL_MANAGED\",\n healthChecks: defaultRegionHealthCheck.id,\n});\nconst defaultRegionUrlMap = new gcp.compute.RegionUrlMap(\"default\", {\n name: \"l7-ilb-map\",\n project: \"my-project-name\",\n region: \"us-west1\",\n defaultService: urlMap.id,\n});\nconst defaultRegionTargetHttpProxy = new gcp.compute.RegionTargetHttpProxy(\"default\", {\n name: \"l7-ilb-proxy\",\n project: \"my-project-name\",\n region: \"us-west1\",\n urlMap: defaultRegionUrlMap.id,\n});\nconst defaultForwardingRule = new gcp.compute.ForwardingRule(\"default\", {\n name: \"l7-ilb-forwarding-rule\",\n project: \"my-project-name\",\n region: \"us-west1\",\n loadBalancingScheme: \"INTERNAL_MANAGED\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n ipProtocol: \"TCP\",\n portRange: \"80\",\n target: defaultRegionTargetHttpProxy.id,\n ipAddress: defaultAddress.id,\n}, {\n dependsOn: [proxyOnly],\n});\nconst authzExtension = new gcp.compute.RegionBackendService(\"authz_extension\", {\n name: \"authz-service\",\n project: \"my-project-name\",\n region: \"us-west1\",\n protocol: \"HTTP2\",\n loadBalancingScheme: \"INTERNAL_MANAGED\",\n portName: \"grpc\",\n});\nconst defaultAuthzExtension = new gcp.networkservices.AuthzExtension(\"default\", {\n name: \"my-authz-ext\",\n project: \"my-project-name\",\n location: \"us-west1\",\n description: \"my description\",\n loadBalancingScheme: \"INTERNAL_MANAGED\",\n authority: \"ext11.com\",\n service: authzExtension.selfLink,\n timeout: \"0.1s\",\n failOpen: false,\n forwardHeaders: [\"Authorization\"],\n});\nconst defaultAuthzPolicy = new gcp.networksecurity.AuthzPolicy(\"default\", {\n name: \"my-authz-policy\",\n project: \"my-project-name\",\n location: \"us-west1\",\n description: \"my description\",\n target: {\n loadBalancingScheme: \"INTERNAL_MANAGED\",\n resources: [defaultForwardingRule.selfLink],\n },\n action: \"CUSTOM\",\n customProvider: {\n authzExtension: {\n resources: [defaultAuthzExtension.id],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"lb-network\",\n project=\"my-project-name\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"backend-subnet\",\n project=\"my-project-name\",\n region=\"us-west1\",\n ip_cidr_range=\"10.1.2.0/24\",\n network=default.id)\nproxy_only = gcp.compute.Subnetwork(\"proxy_only\",\n name=\"proxy-only-subnet\",\n project=\"my-project-name\",\n region=\"us-west1\",\n ip_cidr_range=\"10.129.0.0/23\",\n purpose=\"REGIONAL_MANAGED_PROXY\",\n role=\"ACTIVE\",\n network=default.id)\ndefault_address = gcp.compute.Address(\"default\",\n name=\"l7-ilb-ip-address\",\n project=\"my-project-name\",\n region=\"us-west1\",\n subnetwork=default_subnetwork.id,\n address_type=\"INTERNAL\",\n purpose=\"GCE_ENDPOINT\")\ndefault_region_health_check = gcp.compute.RegionHealthCheck(\"default\",\n name=\"l7-ilb-basic-check\",\n project=\"my-project-name\",\n region=\"us-west1\",\n http_health_check={\n \"port_specification\": \"USE_SERVING_PORT\",\n })\nurl_map = gcp.compute.RegionBackendService(\"url_map\",\n name=\"l7-ilb-backend-service\",\n project=\"my-project-name\",\n region=\"us-west1\",\n load_balancing_scheme=\"INTERNAL_MANAGED\",\n health_checks=default_region_health_check.id)\ndefault_region_url_map = gcp.compute.RegionUrlMap(\"default\",\n name=\"l7-ilb-map\",\n project=\"my-project-name\",\n region=\"us-west1\",\n default_service=url_map.id)\ndefault_region_target_http_proxy = gcp.compute.RegionTargetHttpProxy(\"default\",\n name=\"l7-ilb-proxy\",\n project=\"my-project-name\",\n region=\"us-west1\",\n url_map=default_region_url_map.id)\ndefault_forwarding_rule = gcp.compute.ForwardingRule(\"default\",\n name=\"l7-ilb-forwarding-rule\",\n project=\"my-project-name\",\n region=\"us-west1\",\n load_balancing_scheme=\"INTERNAL_MANAGED\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n ip_protocol=\"TCP\",\n port_range=\"80\",\n target=default_region_target_http_proxy.id,\n ip_address=default_address.id,\n opts = pulumi.ResourceOptions(depends_on=[proxy_only]))\nauthz_extension = gcp.compute.RegionBackendService(\"authz_extension\",\n name=\"authz-service\",\n project=\"my-project-name\",\n region=\"us-west1\",\n protocol=\"HTTP2\",\n load_balancing_scheme=\"INTERNAL_MANAGED\",\n port_name=\"grpc\")\ndefault_authz_extension = gcp.networkservices.AuthzExtension(\"default\",\n name=\"my-authz-ext\",\n project=\"my-project-name\",\n location=\"us-west1\",\n description=\"my description\",\n load_balancing_scheme=\"INTERNAL_MANAGED\",\n authority=\"ext11.com\",\n service=authz_extension.self_link,\n timeout=\"0.1s\",\n fail_open=False,\n forward_headers=[\"Authorization\"])\ndefault_authz_policy = gcp.networksecurity.AuthzPolicy(\"default\",\n name=\"my-authz-policy\",\n project=\"my-project-name\",\n location=\"us-west1\",\n description=\"my description\",\n target={\n \"load_balancing_scheme\": \"INTERNAL_MANAGED\",\n \"resources\": [default_forwarding_rule.self_link],\n },\n action=\"CUSTOM\",\n custom_provider={\n \"authz_extension\": {\n \"resources\": [default_authz_extension.id],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"lb-network\",\n Project = \"my-project-name\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"backend-subnet\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n IpCidrRange = \"10.1.2.0/24\",\n Network = @default.Id,\n });\n\n var proxyOnly = new Gcp.Compute.Subnetwork(\"proxy_only\", new()\n {\n Name = \"proxy-only-subnet\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n IpCidrRange = \"10.129.0.0/23\",\n Purpose = \"REGIONAL_MANAGED_PROXY\",\n Role = \"ACTIVE\",\n Network = @default.Id,\n });\n\n var defaultAddress = new Gcp.Compute.Address(\"default\", new()\n {\n Name = \"l7-ilb-ip-address\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n Subnetwork = defaultSubnetwork.Id,\n AddressType = \"INTERNAL\",\n Purpose = \"GCE_ENDPOINT\",\n });\n\n var defaultRegionHealthCheck = new Gcp.Compute.RegionHealthCheck(\"default\", new()\n {\n Name = \"l7-ilb-basic-check\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs\n {\n PortSpecification = \"USE_SERVING_PORT\",\n },\n });\n\n var urlMap = new Gcp.Compute.RegionBackendService(\"url_map\", new()\n {\n Name = \"l7-ilb-backend-service\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n LoadBalancingScheme = \"INTERNAL_MANAGED\",\n HealthChecks = defaultRegionHealthCheck.Id,\n });\n\n var defaultRegionUrlMap = new Gcp.Compute.RegionUrlMap(\"default\", new()\n {\n Name = \"l7-ilb-map\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n DefaultService = urlMap.Id,\n });\n\n var defaultRegionTargetHttpProxy = new Gcp.Compute.RegionTargetHttpProxy(\"default\", new()\n {\n Name = \"l7-ilb-proxy\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n UrlMap = defaultRegionUrlMap.Id,\n });\n\n var defaultForwardingRule = new Gcp.Compute.ForwardingRule(\"default\", new()\n {\n Name = \"l7-ilb-forwarding-rule\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n LoadBalancingScheme = \"INTERNAL_MANAGED\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n IpProtocol = \"TCP\",\n PortRange = \"80\",\n Target = defaultRegionTargetHttpProxy.Id,\n IpAddress = defaultAddress.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n proxyOnly,\n },\n });\n\n var authzExtension = new Gcp.Compute.RegionBackendService(\"authz_extension\", new()\n {\n Name = \"authz-service\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n Protocol = \"HTTP2\",\n LoadBalancingScheme = \"INTERNAL_MANAGED\",\n PortName = \"grpc\",\n });\n\n var defaultAuthzExtension = new Gcp.NetworkServices.AuthzExtension(\"default\", new()\n {\n Name = \"my-authz-ext\",\n Project = \"my-project-name\",\n Location = \"us-west1\",\n Description = \"my description\",\n LoadBalancingScheme = \"INTERNAL_MANAGED\",\n Authority = \"ext11.com\",\n Service = authzExtension.SelfLink,\n Timeout = \"0.1s\",\n FailOpen = false,\n ForwardHeaders = new[]\n {\n \"Authorization\",\n },\n });\n\n var defaultAuthzPolicy = new Gcp.NetworkSecurity.AuthzPolicy(\"default\", new()\n {\n Name = \"my-authz-policy\",\n Project = \"my-project-name\",\n Location = \"us-west1\",\n Description = \"my description\",\n Target = new Gcp.NetworkSecurity.Inputs.AuthzPolicyTargetArgs\n {\n LoadBalancingScheme = \"INTERNAL_MANAGED\",\n Resources = new[]\n {\n defaultForwardingRule.SelfLink,\n },\n },\n Action = \"CUSTOM\",\n CustomProvider = new Gcp.NetworkSecurity.Inputs.AuthzPolicyCustomProviderArgs\n {\n AuthzExtension = new Gcp.NetworkSecurity.Inputs.AuthzPolicyCustomProviderAuthzExtensionArgs\n {\n Resources = new[]\n {\n defaultAuthzExtension.Id,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"lb-network\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\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\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"backend-subnet\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.2.0/24\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproxyOnly, err := compute.NewSubnetwork(ctx, \"proxy_only\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"proxy-only-subnet\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.129.0.0/23\"),\n\t\t\tPurpose: pulumi.String(\"REGIONAL_MANAGED_PROXY\"),\n\t\t\tRole: pulumi.String(\"ACTIVE\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAddress, err := compute.NewAddress(ctx, \"default\", \u0026compute.AddressArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-ip-address\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"GCE_ENDPOINT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultRegionHealthCheck, err := compute.NewRegionHealthCheck(ctx, \"default\", \u0026compute.RegionHealthCheckArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-basic-check\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tHttpHealthCheck: \u0026compute.RegionHealthCheckHttpHealthCheckArgs{\n\t\t\t\tPortSpecification: pulumi.String(\"USE_SERVING_PORT\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\turlMap, err := compute.NewRegionBackendService(ctx, \"url_map\", \u0026compute.RegionBackendServiceArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-backend-service\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_MANAGED\"),\n\t\t\tHealthChecks: defaultRegionHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultRegionUrlMap, err := compute.NewRegionUrlMap(ctx, \"default\", \u0026compute.RegionUrlMapArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-map\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tDefaultService: urlMap.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultRegionTargetHttpProxy, err := compute.NewRegionTargetHttpProxy(ctx, \"default\", \u0026compute.RegionTargetHttpProxyArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-proxy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tUrlMap: defaultRegionUrlMap.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultForwardingRule, err := compute.NewForwardingRule(ctx, \"default\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"l7-ilb-forwarding-rule\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_MANAGED\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tIpProtocol: pulumi.String(\"TCP\"),\n\t\t\tPortRange: pulumi.String(\"80\"),\n\t\t\tTarget: defaultRegionTargetHttpProxy.ID(),\n\t\t\tIpAddress: defaultAddress.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproxyOnly,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthzExtension, err := compute.NewRegionBackendService(ctx, \"authz_extension\", \u0026compute.RegionBackendServiceArgs{\n\t\t\tName: pulumi.String(\"authz-service\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tProtocol: pulumi.String(\"HTTP2\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_MANAGED\"),\n\t\t\tPortName: pulumi.String(\"grpc\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAuthzExtension, err := networkservices.NewAuthzExtension(ctx, \"default\", \u0026networkservices.AuthzExtensionArgs{\n\t\t\tName: pulumi.String(\"my-authz-ext\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_MANAGED\"),\n\t\t\tAuthority: pulumi.String(\"ext11.com\"),\n\t\t\tService: authzExtension.SelfLink,\n\t\t\tTimeout: pulumi.String(\"0.1s\"),\n\t\t\tFailOpen: pulumi.Bool(false),\n\t\t\tForwardHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Authorization\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networksecurity.NewAuthzPolicy(ctx, \"default\", \u0026networksecurity.AuthzPolicyArgs{\n\t\t\tName: pulumi.String(\"my-authz-policy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tTarget: \u0026networksecurity.AuthzPolicyTargetArgs{\n\t\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL_MANAGED\"),\n\t\t\t\tResources: pulumi.StringArray{\n\t\t\t\t\tdefaultForwardingRule.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tAction: pulumi.String(\"CUSTOM\"),\n\t\t\tCustomProvider: \u0026networksecurity.AuthzPolicyCustomProviderArgs{\n\t\t\t\tAuthzExtension: \u0026networksecurity.AuthzPolicyCustomProviderAuthzExtensionArgs{\n\t\t\t\t\tResources: pulumi.StringArray{\n\t\t\t\t\t\tdefaultAuthzExtension.ID(),\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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.RegionHealthCheck;\nimport com.pulumi.gcp.compute.RegionHealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.RegionUrlMap;\nimport com.pulumi.gcp.compute.RegionUrlMapArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.networkservices.AuthzExtension;\nimport com.pulumi.gcp.networkservices.AuthzExtensionArgs;\nimport com.pulumi.gcp.networksecurity.AuthzPolicy;\nimport com.pulumi.gcp.networksecurity.AuthzPolicyArgs;\nimport com.pulumi.gcp.networksecurity.inputs.AuthzPolicyTargetArgs;\nimport com.pulumi.gcp.networksecurity.inputs.AuthzPolicyCustomProviderArgs;\nimport com.pulumi.gcp.networksecurity.inputs.AuthzPolicyCustomProviderAuthzExtensionArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"lb-network\")\n .project(\"my-project-name\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"backend-subnet\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .ipCidrRange(\"10.1.2.0/24\")\n .network(default_.id())\n .build());\n\n var proxyOnly = new Subnetwork(\"proxyOnly\", SubnetworkArgs.builder()\n .name(\"proxy-only-subnet\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .ipCidrRange(\"10.129.0.0/23\")\n .purpose(\"REGIONAL_MANAGED_PROXY\")\n .role(\"ACTIVE\")\n .network(default_.id())\n .build());\n\n var defaultAddress = new Address(\"defaultAddress\", AddressArgs.builder()\n .name(\"l7-ilb-ip-address\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .subnetwork(defaultSubnetwork.id())\n .addressType(\"INTERNAL\")\n .purpose(\"GCE_ENDPOINT\")\n .build());\n\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder()\n .name(\"l7-ilb-basic-check\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .portSpecification(\"USE_SERVING_PORT\")\n .build())\n .build());\n\n var urlMap = new RegionBackendService(\"urlMap\", RegionBackendServiceArgs.builder()\n .name(\"l7-ilb-backend-service\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder()\n .name(\"l7-ilb-map\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .defaultService(urlMap.id())\n .build());\n\n var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", RegionTargetHttpProxyArgs.builder()\n .name(\"l7-ilb-proxy\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .urlMap(defaultRegionUrlMap.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder()\n .name(\"l7-ilb-forwarding-rule\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .ipProtocol(\"TCP\")\n .portRange(\"80\")\n .target(defaultRegionTargetHttpProxy.id())\n .ipAddress(defaultAddress.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(proxyOnly)\n .build());\n\n var authzExtension = new RegionBackendService(\"authzExtension\", RegionBackendServiceArgs.builder()\n .name(\"authz-service\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .protocol(\"HTTP2\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .portName(\"grpc\")\n .build());\n\n var defaultAuthzExtension = new AuthzExtension(\"defaultAuthzExtension\", AuthzExtensionArgs.builder()\n .name(\"my-authz-ext\")\n .project(\"my-project-name\")\n .location(\"us-west1\")\n .description(\"my description\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .authority(\"ext11.com\")\n .service(authzExtension.selfLink())\n .timeout(\"0.1s\")\n .failOpen(false)\n .forwardHeaders(\"Authorization\")\n .build());\n\n var defaultAuthzPolicy = new AuthzPolicy(\"defaultAuthzPolicy\", AuthzPolicyArgs.builder()\n .name(\"my-authz-policy\")\n .project(\"my-project-name\")\n .location(\"us-west1\")\n .description(\"my description\")\n .target(AuthzPolicyTargetArgs.builder()\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .resources(defaultForwardingRule.selfLink())\n .build())\n .action(\"CUSTOM\")\n .customProvider(AuthzPolicyCustomProviderArgs.builder()\n .authzExtension(AuthzPolicyCustomProviderAuthzExtensionArgs.builder()\n .resources(defaultAuthzExtension.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: lb-network\n project: my-project-name\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: backend-subnet\n project: my-project-name\n region: us-west1\n ipCidrRange: 10.1.2.0/24\n network: ${default.id}\n proxyOnly:\n type: gcp:compute:Subnetwork\n name: proxy_only\n properties:\n name: proxy-only-subnet\n project: my-project-name\n region: us-west1\n ipCidrRange: 10.129.0.0/23\n purpose: REGIONAL_MANAGED_PROXY\n role: ACTIVE\n network: ${default.id}\n defaultAddress:\n type: gcp:compute:Address\n name: default\n properties:\n name: l7-ilb-ip-address\n project: my-project-name\n region: us-west1\n subnetwork: ${defaultSubnetwork.id}\n addressType: INTERNAL\n purpose: GCE_ENDPOINT\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n name: default\n properties:\n name: l7-ilb-basic-check\n project: my-project-name\n region: us-west1\n httpHealthCheck:\n portSpecification: USE_SERVING_PORT\n urlMap:\n type: gcp:compute:RegionBackendService\n name: url_map\n properties:\n name: l7-ilb-backend-service\n project: my-project-name\n region: us-west1\n loadBalancingScheme: INTERNAL_MANAGED\n healthChecks: ${defaultRegionHealthCheck.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n name: default\n properties:\n name: l7-ilb-map\n project: my-project-name\n region: us-west1\n defaultService: ${urlMap.id}\n defaultRegionTargetHttpProxy:\n type: gcp:compute:RegionTargetHttpProxy\n name: default\n properties:\n name: l7-ilb-proxy\n project: my-project-name\n region: us-west1\n urlMap: ${defaultRegionUrlMap.id}\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n name: default\n properties:\n name: l7-ilb-forwarding-rule\n project: my-project-name\n region: us-west1\n loadBalancingScheme: INTERNAL_MANAGED\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n ipProtocol: TCP\n portRange: '80'\n target: ${defaultRegionTargetHttpProxy.id}\n ipAddress: ${defaultAddress.id}\n options:\n dependsOn:\n - ${proxyOnly}\n authzExtension:\n type: gcp:compute:RegionBackendService\n name: authz_extension\n properties:\n name: authz-service\n project: my-project-name\n region: us-west1\n protocol: HTTP2\n loadBalancingScheme: INTERNAL_MANAGED\n portName: grpc\n defaultAuthzExtension:\n type: gcp:networkservices:AuthzExtension\n name: default\n properties:\n name: my-authz-ext\n project: my-project-name\n location: us-west1\n description: my description\n loadBalancingScheme: INTERNAL_MANAGED\n authority: ext11.com\n service: ${authzExtension.selfLink}\n timeout: 0.1s\n failOpen: false\n forwardHeaders:\n - Authorization\n defaultAuthzPolicy:\n type: gcp:networksecurity:AuthzPolicy\n name: default\n properties:\n name: my-authz-policy\n project: my-project-name\n location: us-west1\n description: my description\n target:\n loadBalancingScheme: INTERNAL_MANAGED\n resources:\n - ${defaultForwardingRule.selfLink}\n action: CUSTOM\n customProvider:\n authzExtension:\n resources:\n - ${defaultAuthzExtension.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAuthzPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/authzPolicies/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthzPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default projects/{{project}}/locations/{{location}}/authzPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{name}}\n```\n\n", + "description": "AuthzPolicy is a resource that allows to forward traffic to a callout backend designed to scan the traffic for security purposes.\n\n\nTo get more information about AuthzPolicy, see:\n\n* [API documentation](https://cloud.google.com/load-balancing/docs/reference/network-security/rest/v1beta1/projects.locations.authzPolicies)\n\n## Example Usage\n\n## Import\n\nAuthzPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/authzPolicies/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthzPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default projects/{{project}}/locations/{{location}}/authzPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/authzPolicy:AuthzPolicy default {{name}}\n```\n\n", "properties": { "action": { "type": "string", @@ -253476,8 +255245,7 @@ "items": { "type": "integer" }, - "description": "One or more port numbers (1-65535), on which the Gateway will receive traffic.\nThe proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are\nlimited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.\n", - "willReplaceOnChanges": true + "description": "One or more port numbers (1-65535), on which the Gateway will receive traffic.\nThe proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are\nlimited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.\n" }, "project": { "type": "string", @@ -253579,8 +255347,7 @@ "items": { "type": "integer" }, - "description": "One or more port numbers (1-65535), on which the Gateway will receive traffic.\nThe proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are\nlimited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.\n", - "willReplaceOnChanges": true + "description": "One or more port numbers (1-65535), on which the Gateway will receive traffic.\nThe proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are\nlimited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.\n" }, "project": { "type": "string", @@ -258721,7 +260488,7 @@ } }, "gcp:orgpolicy/policy:Policy": { - "description": "Defines an organization policy which is used to specify constraints for configurations of Google Cloud resources.\n\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/organizations.policies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-custom-constraints)\n * [Supported Services](https://cloud.google.com/resource-manager/docs/organization-policy/custom-constraint-supported-services)\n\n## Example Usage\n\n### Org Policy Policy Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.projectId}/policies/iam.disableServiceAccountKeyUpload`,\n parent: pulumi.interpolate`projects/${basic.projectId}`,\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.project_id.apply(lambda project_id: f\"projects/{project_id}/policies/iam.disableServiceAccountKeyUpload\"),\n parent=basic.project_id.apply(lambda project_id: f\"projects/{project_id}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}/policies/iam.disableServiceAccountKeyUpload\"),\n Parent = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/iam.disableServiceAccountKeyUpload\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s/policies/iam.disableServiceAccountKeyUpload\", projectId)))\n .parent(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s\", projectId)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.projectId}/policies/iam.disableServiceAccountKeyUpload\n parent: projects/${basic.projectId}\n spec:\n rules:\n - enforce: FALSE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Folder\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Folder(\"basic\", {\n parent: \"organizations/123456789\",\n displayName: \"folder\",\n deletionProtection: false,\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`${basic.name}/policies/gcp.resourceLocations`,\n parent: basic.name,\n spec: {\n inheritFromParent: true,\n rules: [{\n denyAll: \"TRUE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Folder(\"basic\",\n parent=\"organizations/123456789\",\n display_name=\"folder\",\n deletion_protection=False)\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"{name}/policies/gcp.resourceLocations\"),\n parent=basic.name,\n spec={\n \"inherit_from_parent\": True,\n \"rules\": [{\n \"deny_all\": \"TRUE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Folder(\"basic\", new()\n {\n Parent = \"organizations/123456789\",\n DisplayName = \"folder\",\n DeletionProtection = false,\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name,\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n InheritFromParent = true,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n DenyAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewFolder(ctx, \"basic\", \u0026organizations.FolderArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name,\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(true),\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tDenyAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Folder(\"basic\", FolderArgs.builder()\n .parent(\"organizations/123456789\")\n .displayName(\"folder\")\n .deletionProtection(false)\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name())\n .spec(PolicySpecArgs.builder()\n .inheritFromParent(true)\n .rules(PolicySpecRuleArgs.builder()\n .denyAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: ${basic.name}/policies/gcp.resourceLocations\n parent: ${basic.name}\n spec:\n inheritFromParent: true\n rules:\n - denyAll: TRUE\n basic:\n type: gcp:organizations:Folder\n properties:\n parent: organizations/123456789\n displayName: folder\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Organization\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent: \"organizations/123456789\",\n spec: {\n reset: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent=\"organizations/123456789\",\n spec={\n \"reset\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Reset = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: pulumi.String(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tReset: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\")\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .reset(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/gcp.detailedAuditLoggingMode\n parent: organizations/123456789\n spec:\n reset: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.projectId}/policies/gcp.resourceLocations`,\n parent: pulumi.interpolate`projects/${basic.projectId}`,\n spec: {\n rules: [\n {\n condition: {\n description: \"A sample condition for the policy\",\n expression: \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n location: \"sample-location.log\",\n title: \"sample-condition\",\n },\n values: {\n allowedValues: [\"projects/allowed-project\"],\n deniedValues: [\"projects/denied-project\"],\n },\n },\n {\n allowAll: \"TRUE\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.project_id.apply(lambda project_id: f\"projects/{project_id}/policies/gcp.resourceLocations\"),\n parent=basic.project_id.apply(lambda project_id: f\"projects/{project_id}\"),\n spec={\n \"rules\": [\n {\n \"condition\": {\n \"description\": \"A sample condition for the policy\",\n \"expression\": \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n \"location\": \"sample-location.log\",\n \"title\": \"sample-condition\",\n },\n \"values\": {\n \"allowed_values\": [\"projects/allowed-project\"],\n \"denied_values\": [\"projects/denied-project\"],\n },\n },\n {\n \"allow_all\": \"TRUE\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}/policies/gcp.resourceLocations\"),\n Parent = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Condition = new Gcp.OrgPolicy.Inputs.PolicySpecRuleConditionArgs\n {\n Description = \"A sample condition for the policy\",\n Expression = \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n Location = \"sample-location.log\",\n Title = \"sample-condition\",\n },\n Values = new Gcp.OrgPolicy.Inputs.PolicySpecRuleValuesArgs\n {\n AllowedValues = new[]\n {\n \"projects/allowed-project\",\n },\n DeniedValues = new[]\n {\n \"projects/denied-project\",\n },\n },\n },\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n AllowAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/gcp.resourceLocations\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tCondition: \u0026orgpolicy.PolicySpecRuleConditionArgs{\n\t\t\t\t\t\t\tDescription: pulumi.String(\"A sample condition for the policy\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\"),\n\t\t\t\t\t\t\tLocation: pulumi.String(\"sample-location.log\"),\n\t\t\t\t\t\t\tTitle: pulumi.String(\"sample-condition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValues: \u0026orgpolicy.PolicySpecRuleValuesArgs{\n\t\t\t\t\t\t\tAllowedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/allowed-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDeniedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/denied-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tAllowAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s/policies/gcp.resourceLocations\", projectId)))\n .parent(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s\", projectId)))\n .spec(PolicySpecArgs.builder()\n .rules( \n PolicySpecRuleArgs.builder()\n .condition(PolicySpecRuleConditionArgs.builder()\n .description(\"A sample condition for the policy\")\n .expression(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\")\n .location(\"sample-location.log\")\n .title(\"sample-condition\")\n .build())\n .values(PolicySpecRuleValuesArgs.builder()\n .allowedValues(\"projects/allowed-project\")\n .deniedValues(\"projects/denied-project\")\n .build())\n .build(),\n PolicySpecRuleArgs.builder()\n .allowAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.projectId}/policies/gcp.resourceLocations\n parent: projects/${basic.projectId}\n spec:\n rules:\n - condition:\n description: A sample condition for the policy\n expression: resource.matchTagId('tagKeys/123', 'tagValues/345')\n location: sample-location.log\n title: sample-condition\n values:\n allowedValues:\n - projects/allowed-project\n deniedValues:\n - projects/denied-project\n - allowAll: TRUE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Dry Run Spec\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst constraint = new gcp.orgpolicy.CustomConstraint(\"constraint\", {\n name: \"custom.disableGkeAutoUpgrade_76044\",\n parent: \"organizations/123456789\",\n displayName: \"Disable GKE auto upgrade\",\n description: \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n actionType: \"ALLOW\",\n condition: \"resource.management.autoUpgrade == false\",\n methodTypes: [\"CREATE\"],\n resourceTypes: [\"container.googleapis.com/NodePool\"],\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`organizations/123456789/policies/${constraint.name}`,\n parent: \"organizations/123456789\",\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n dryRunSpec: {\n inheritFromParent: false,\n reset: false,\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconstraint = gcp.orgpolicy.CustomConstraint(\"constraint\",\n name=\"custom.disableGkeAutoUpgrade_76044\",\n parent=\"organizations/123456789\",\n display_name=\"Disable GKE auto upgrade\",\n description=\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n action_type=\"ALLOW\",\n condition=\"resource.management.autoUpgrade == false\",\n method_types=[\"CREATE\"],\n resource_types=[\"container.googleapis.com/NodePool\"])\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=constraint.name.apply(lambda name: f\"organizations/123456789/policies/{name}\"),\n parent=\"organizations/123456789\",\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n },\n dry_run_spec={\n \"inherit_from_parent\": False,\n \"reset\": False,\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var constraint = new Gcp.OrgPolicy.CustomConstraint(\"constraint\", new()\n {\n Name = \"custom.disableGkeAutoUpgrade_76044\",\n Parent = \"organizations/123456789\",\n DisplayName = \"Disable GKE auto upgrade\",\n Description = \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n ActionType = \"ALLOW\",\n Condition = \"resource.management.autoUpgrade == false\",\n MethodTypes = new[]\n {\n \"CREATE\",\n },\n ResourceTypes = new[]\n {\n \"container.googleapis.com/NodePool\",\n },\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = constraint.Name.Apply(name =\u003e $\"organizations/123456789/policies/{name}\"),\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n DryRunSpec = new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecArgs\n {\n InheritFromParent = false,\n Reset = false,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tconstraint, err := orgpolicy.NewCustomConstraint(ctx, \"constraint\", \u0026orgpolicy.CustomConstraintArgs{\n\t\t\tName: pulumi.String(\"custom.disableGkeAutoUpgrade_76044\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"Disable GKE auto upgrade\"),\n\t\t\tDescription: pulumi.String(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\"),\n\t\t\tActionType: pulumi.String(\"ALLOW\"),\n\t\t\tCondition: pulumi.String(\"resource.management.autoUpgrade == false\"),\n\t\t\tMethodTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE\"),\n\t\t\t},\n\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"container.googleapis.com/NodePool\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: constraint.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/policies/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDryRunSpec: \u0026orgpolicy.PolicyDryRunSpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(false),\n\t\t\t\tReset: pulumi.Bool(false),\n\t\t\t\tRules: orgpolicy.PolicyDryRunSpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicyDryRunSpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.CustomConstraint;\nimport com.pulumi.gcp.orgpolicy.CustomConstraintArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicyDryRunSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var constraint = new CustomConstraint(\"constraint\", CustomConstraintArgs.builder()\n .name(\"custom.disableGkeAutoUpgrade_76044\")\n .parent(\"organizations/123456789\")\n .displayName(\"Disable GKE auto upgrade\")\n .description(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\")\n .actionType(\"ALLOW\")\n .condition(\"resource.management.autoUpgrade == false\")\n .methodTypes(\"CREATE\")\n .resourceTypes(\"container.googleapis.com/NodePool\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(constraint.name().applyValue(name -\u003e String.format(\"organizations/123456789/policies/%s\", name)))\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .dryRunSpec(PolicyDryRunSpecArgs.builder()\n .inheritFromParent(false)\n .reset(false)\n .rules(PolicyDryRunSpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n constraint:\n type: gcp:orgpolicy:CustomConstraint\n properties:\n name: custom.disableGkeAutoUpgrade_76044\n parent: organizations/123456789\n displayName: Disable GKE auto upgrade\n description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\n actionType: ALLOW\n condition: resource.management.autoUpgrade == false\n methodTypes:\n - CREATE\n resourceTypes:\n - container.googleapis.com/NodePool\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/${constraint.name}\n parent: organizations/123456789\n spec:\n rules:\n - enforce: FALSE\n dryRunSpec:\n inheritFromParent: false\n reset: false\n rules:\n - enforce: FALSE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Parameters Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/compute.managed.restrictDiskCreation`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [{\n enforce: \"TRUE\",\n parameters: JSON.stringify({\n isSizeLimitCheck: true,\n allowedDiskTypes: [\n \"pd-ssd\",\n \"pd-standard\",\n ],\n }),\n }],\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/compute.managed.restrictDiskCreation\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"TRUE\",\n \"parameters\": json.dumps({\n \"isSizeLimitCheck\": True,\n \"allowedDiskTypes\": [\n \"pd-ssd\",\n \"pd-standard\",\n ],\n }),\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/compute.managed.restrictDiskCreation\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"TRUE\",\n Parameters = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"isSizeLimitCheck\"] = true,\n [\"allowedDiskTypes\"] = new[]\n {\n \"pd-ssd\",\n \"pd-standard\",\n },\n }),\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"isSizeLimitCheck\": true,\n\t\t\t\"allowedDiskTypes\": []string{\n\t\t\t\t\"pd-ssd\",\n\t\t\t\t\"pd-standard\",\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/compute.managed.restrictDiskCreation\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"TRUE\"),\n\t\t\t\t\t\tParameters: pulumi.String(json0),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/compute.managed.restrictDiskCreation\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"TRUE\")\n .parameters(serializeJson(\n jsonObject(\n jsonProperty(\"isSizeLimitCheck\", true),\n jsonProperty(\"allowedDiskTypes\", jsonArray(\n \"pd-ssd\", \n \"pd-standard\"\n ))\n )))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/compute.managed.restrictDiskCreation\n parent: projects/${basic.name}\n spec:\n rules:\n - enforce: TRUE\n parameters:\n fn::toJSON:\n isSizeLimitCheck: true\n allowedDiskTypes:\n - pd-ssd\n - pd-standard\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/policies/{{name}}`\n\nWhen using the `pulumi import` command, Policy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:orgpolicy/policy:Policy default {{parent}}/policies/{{name}}\n```\n\n", + "description": "Defines an organization policy which is used to specify constraints for configurations of Google Cloud resources.\n\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/organizations.policies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-custom-constraints)\n * [Supported Services](https://cloud.google.com/resource-manager/docs/organization-policy/custom-constraint-supported-services)\n\n## Example Usage\n\n### Org Policy Policy Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.projectId}/policies/iam.disableServiceAccountKeyUpload`,\n parent: pulumi.interpolate`projects/${basic.projectId}`,\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.project_id.apply(lambda project_id: f\"projects/{project_id}/policies/iam.disableServiceAccountKeyUpload\"),\n parent=basic.project_id.apply(lambda project_id: f\"projects/{project_id}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}/policies/iam.disableServiceAccountKeyUpload\"),\n Parent = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/iam.disableServiceAccountKeyUpload\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s/policies/iam.disableServiceAccountKeyUpload\", projectId)))\n .parent(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s\", projectId)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.projectId}/policies/iam.disableServiceAccountKeyUpload\n parent: projects/${basic.projectId}\n spec:\n rules:\n - enforce: FALSE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Folder\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Folder(\"basic\", {\n parent: \"organizations/123456789\",\n displayName: \"folder\",\n deletionProtection: false,\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`${basic.name}/policies/gcp.resourceLocations`,\n parent: basic.name,\n spec: {\n inheritFromParent: true,\n rules: [{\n denyAll: \"TRUE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Folder(\"basic\",\n parent=\"organizations/123456789\",\n display_name=\"folder\",\n deletion_protection=False)\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"{name}/policies/gcp.resourceLocations\"),\n parent=basic.name,\n spec={\n \"inherit_from_parent\": True,\n \"rules\": [{\n \"deny_all\": \"TRUE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Folder(\"basic\", new()\n {\n Parent = \"organizations/123456789\",\n DisplayName = \"folder\",\n DeletionProtection = false,\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name,\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n InheritFromParent = true,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n DenyAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewFolder(ctx, \"basic\", \u0026organizations.FolderArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name,\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(true),\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tDenyAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Folder(\"basic\", FolderArgs.builder()\n .parent(\"organizations/123456789\")\n .displayName(\"folder\")\n .deletionProtection(false)\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name())\n .spec(PolicySpecArgs.builder()\n .inheritFromParent(true)\n .rules(PolicySpecRuleArgs.builder()\n .denyAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: ${basic.name}/policies/gcp.resourceLocations\n parent: ${basic.name}\n spec:\n inheritFromParent: true\n rules:\n - denyAll: TRUE\n basic:\n type: gcp:organizations:Folder\n properties:\n parent: organizations/123456789\n displayName: folder\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Organization\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent: \"organizations/123456789\",\n spec: {\n reset: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent=\"organizations/123456789\",\n spec={\n \"reset\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Reset = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: pulumi.String(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tReset: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\")\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .reset(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/gcp.detailedAuditLoggingMode\n parent: organizations/123456789\n spec:\n reset: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.projectId}/policies/gcp.resourceLocations`,\n parent: pulumi.interpolate`projects/${basic.projectId}`,\n spec: {\n rules: [\n {\n condition: {\n description: \"A sample condition for the policy\",\n expression: \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n location: \"sample-location.log\",\n title: \"sample-condition\",\n },\n values: {\n allowedValues: [\"projects/allowed-project\"],\n deniedValues: [\"projects/denied-project\"],\n },\n },\n {\n allowAll: \"TRUE\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.project_id.apply(lambda project_id: f\"projects/{project_id}/policies/gcp.resourceLocations\"),\n parent=basic.project_id.apply(lambda project_id: f\"projects/{project_id}\"),\n spec={\n \"rules\": [\n {\n \"condition\": {\n \"description\": \"A sample condition for the policy\",\n \"expression\": \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n \"location\": \"sample-location.log\",\n \"title\": \"sample-condition\",\n },\n \"values\": {\n \"allowed_values\": [\"projects/allowed-project\"],\n \"denied_values\": [\"projects/denied-project\"],\n },\n },\n {\n \"allow_all\": \"TRUE\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}/policies/gcp.resourceLocations\"),\n Parent = basic.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Condition = new Gcp.OrgPolicy.Inputs.PolicySpecRuleConditionArgs\n {\n Description = \"A sample condition for the policy\",\n Expression = \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n Location = \"sample-location.log\",\n Title = \"sample-condition\",\n },\n Values = new Gcp.OrgPolicy.Inputs.PolicySpecRuleValuesArgs\n {\n AllowedValues = new[]\n {\n \"projects/allowed-project\",\n },\n DeniedValues = new[]\n {\n \"projects/denied-project\",\n },\n },\n },\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n AllowAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/gcp.resourceLocations\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", projectId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tCondition: \u0026orgpolicy.PolicySpecRuleConditionArgs{\n\t\t\t\t\t\t\tDescription: pulumi.String(\"A sample condition for the policy\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\"),\n\t\t\t\t\t\t\tLocation: pulumi.String(\"sample-location.log\"),\n\t\t\t\t\t\t\tTitle: pulumi.String(\"sample-condition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValues: \u0026orgpolicy.PolicySpecRuleValuesArgs{\n\t\t\t\t\t\t\tAllowedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/allowed-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDeniedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/denied-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tAllowAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s/policies/gcp.resourceLocations\", projectId)))\n .parent(basic.projectId().applyValue(projectId -\u003e String.format(\"projects/%s\", projectId)))\n .spec(PolicySpecArgs.builder()\n .rules( \n PolicySpecRuleArgs.builder()\n .condition(PolicySpecRuleConditionArgs.builder()\n .description(\"A sample condition for the policy\")\n .expression(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\")\n .location(\"sample-location.log\")\n .title(\"sample-condition\")\n .build())\n .values(PolicySpecRuleValuesArgs.builder()\n .allowedValues(\"projects/allowed-project\")\n .deniedValues(\"projects/denied-project\")\n .build())\n .build(),\n PolicySpecRuleArgs.builder()\n .allowAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.projectId}/policies/gcp.resourceLocations\n parent: projects/${basic.projectId}\n spec:\n rules:\n - condition:\n description: A sample condition for the policy\n expression: resource.matchTagId('tagKeys/123', 'tagValues/345')\n location: sample-location.log\n title: sample-condition\n values:\n allowedValues:\n - projects/allowed-project\n deniedValues:\n - projects/denied-project\n - allowAll: TRUE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Dry Run Spec\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst constraint = new gcp.orgpolicy.CustomConstraint(\"constraint\", {\n name: \"custom.disableGkeAutoUpgrade_69391\",\n parent: \"organizations/123456789\",\n displayName: \"Disable GKE auto upgrade\",\n description: \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n actionType: \"ALLOW\",\n condition: \"resource.management.autoUpgrade == false\",\n methodTypes: [\"CREATE\"],\n resourceTypes: [\"container.googleapis.com/NodePool\"],\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`organizations/123456789/policies/${constraint.name}`,\n parent: \"organizations/123456789\",\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n dryRunSpec: {\n inheritFromParent: false,\n reset: false,\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconstraint = gcp.orgpolicy.CustomConstraint(\"constraint\",\n name=\"custom.disableGkeAutoUpgrade_69391\",\n parent=\"organizations/123456789\",\n display_name=\"Disable GKE auto upgrade\",\n description=\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n action_type=\"ALLOW\",\n condition=\"resource.management.autoUpgrade == false\",\n method_types=[\"CREATE\"],\n resource_types=[\"container.googleapis.com/NodePool\"])\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=constraint.name.apply(lambda name: f\"organizations/123456789/policies/{name}\"),\n parent=\"organizations/123456789\",\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n },\n dry_run_spec={\n \"inherit_from_parent\": False,\n \"reset\": False,\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var constraint = new Gcp.OrgPolicy.CustomConstraint(\"constraint\", new()\n {\n Name = \"custom.disableGkeAutoUpgrade_69391\",\n Parent = \"organizations/123456789\",\n DisplayName = \"Disable GKE auto upgrade\",\n Description = \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n ActionType = \"ALLOW\",\n Condition = \"resource.management.autoUpgrade == false\",\n MethodTypes = new[]\n {\n \"CREATE\",\n },\n ResourceTypes = new[]\n {\n \"container.googleapis.com/NodePool\",\n },\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = constraint.Name.Apply(name =\u003e $\"organizations/123456789/policies/{name}\"),\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n DryRunSpec = new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecArgs\n {\n InheritFromParent = false,\n Reset = false,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tconstraint, err := orgpolicy.NewCustomConstraint(ctx, \"constraint\", \u0026orgpolicy.CustomConstraintArgs{\n\t\t\tName: pulumi.String(\"custom.disableGkeAutoUpgrade_69391\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"Disable GKE auto upgrade\"),\n\t\t\tDescription: pulumi.String(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\"),\n\t\t\tActionType: pulumi.String(\"ALLOW\"),\n\t\t\tCondition: pulumi.String(\"resource.management.autoUpgrade == false\"),\n\t\t\tMethodTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE\"),\n\t\t\t},\n\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"container.googleapis.com/NodePool\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: constraint.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/policies/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDryRunSpec: \u0026orgpolicy.PolicyDryRunSpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(false),\n\t\t\t\tReset: pulumi.Bool(false),\n\t\t\t\tRules: orgpolicy.PolicyDryRunSpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicyDryRunSpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.CustomConstraint;\nimport com.pulumi.gcp.orgpolicy.CustomConstraintArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicyDryRunSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var constraint = new CustomConstraint(\"constraint\", CustomConstraintArgs.builder()\n .name(\"custom.disableGkeAutoUpgrade_69391\")\n .parent(\"organizations/123456789\")\n .displayName(\"Disable GKE auto upgrade\")\n .description(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\")\n .actionType(\"ALLOW\")\n .condition(\"resource.management.autoUpgrade == false\")\n .methodTypes(\"CREATE\")\n .resourceTypes(\"container.googleapis.com/NodePool\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(constraint.name().applyValue(name -\u003e String.format(\"organizations/123456789/policies/%s\", name)))\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .dryRunSpec(PolicyDryRunSpecArgs.builder()\n .inheritFromParent(false)\n .reset(false)\n .rules(PolicyDryRunSpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n constraint:\n type: gcp:orgpolicy:CustomConstraint\n properties:\n name: custom.disableGkeAutoUpgrade_69391\n parent: organizations/123456789\n displayName: Disable GKE auto upgrade\n description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\n actionType: ALLOW\n condition: resource.management.autoUpgrade == false\n methodTypes:\n - CREATE\n resourceTypes:\n - container.googleapis.com/NodePool\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/${constraint.name}\n parent: organizations/123456789\n spec:\n rules:\n - enforce: FALSE\n dryRunSpec:\n inheritFromParent: false\n reset: false\n rules:\n - enforce: FALSE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Parameters Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/compute.managed.restrictDiskCreation`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [{\n enforce: \"TRUE\",\n parameters: JSON.stringify({\n isSizeLimitCheck: true,\n allowedDiskTypes: [\n \"pd-ssd\",\n \"pd-standard\",\n ],\n }),\n }],\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/compute.managed.restrictDiskCreation\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"TRUE\",\n \"parameters\": json.dumps({\n \"isSizeLimitCheck\": True,\n \"allowedDiskTypes\": [\n \"pd-ssd\",\n \"pd-standard\",\n ],\n }),\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/compute.managed.restrictDiskCreation\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"TRUE\",\n Parameters = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"isSizeLimitCheck\"] = true,\n [\"allowedDiskTypes\"] = new[]\n {\n \"pd-ssd\",\n \"pd-standard\",\n },\n }),\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"isSizeLimitCheck\": true,\n\t\t\t\"allowedDiskTypes\": []string{\n\t\t\t\t\"pd-ssd\",\n\t\t\t\t\"pd-standard\",\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/compute.managed.restrictDiskCreation\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"TRUE\"),\n\t\t\t\t\t\tParameters: pulumi.String(json0),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/compute.managed.restrictDiskCreation\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"TRUE\")\n .parameters(serializeJson(\n jsonObject(\n jsonProperty(\"isSizeLimitCheck\", true),\n jsonProperty(\"allowedDiskTypes\", jsonArray(\n \"pd-ssd\", \n \"pd-standard\"\n ))\n )))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/compute.managed.restrictDiskCreation\n parent: projects/${basic.name}\n spec:\n rules:\n - enforce: TRUE\n parameters:\n fn::toJSON:\n isSizeLimitCheck: true\n allowedDiskTypes:\n - pd-ssd\n - pd-standard\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/policies/{{name}}`\n\nWhen using the `pulumi import` command, Policy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:orgpolicy/policy:Policy default {{parent}}/policies/{{name}}\n```\n\n", "properties": { "dryRunSpec": { "$ref": "#/types/gcp:orgpolicy/PolicyDryRunSpec:PolicyDryRunSpec", @@ -259728,6 +261495,456 @@ "type": "object" } }, + "gcp:parametermanager/parameter:Parameter": { + "description": "## Example Usage\n\n### Parameter 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 parameter_basic = new gcp.parametermanager.Parameter(\"parameter-basic\", {parameterId: \"parameter\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nparameter_basic = gcp.parametermanager.Parameter(\"parameter-basic\", parameter_id=\"parameter\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var parameter_basic = new Gcp.ParameterManager.Parameter(\"parameter-basic\", new()\n {\n ParameterId = \"parameter\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewParameter(ctx, \"parameter-basic\", \u0026parametermanager.ParameterArgs{\n\t\t\tParameterId: pulumi.String(\"parameter\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.Parameter;\nimport com.pulumi.gcp.parametermanager.ParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var parameter_basic = new Parameter(\"parameter-basic\", ParameterArgs.builder()\n .parameterId(\"parameter\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parameter-basic:\n type: gcp:parametermanager:Parameter\n properties:\n parameterId: parameter\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Parameter With Format\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst parameter_with_format = new gcp.parametermanager.Parameter(\"parameter-with-format\", {\n parameterId: \"parameter\",\n format: \"JSON\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nparameter_with_format = gcp.parametermanager.Parameter(\"parameter-with-format\",\n parameter_id=\"parameter\",\n format=\"JSON\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var parameter_with_format = new Gcp.ParameterManager.Parameter(\"parameter-with-format\", new()\n {\n ParameterId = \"parameter\",\n Format = \"JSON\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewParameter(ctx, \"parameter-with-format\", \u0026parametermanager.ParameterArgs{\n\t\t\tParameterId: pulumi.String(\"parameter\"),\n\t\t\tFormat: pulumi.String(\"JSON\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.Parameter;\nimport com.pulumi.gcp.parametermanager.ParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var parameter_with_format = new Parameter(\"parameter-with-format\", ParameterArgs.builder()\n .parameterId(\"parameter\")\n .format(\"JSON\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parameter-with-format:\n type: gcp:parametermanager:Parameter\n properties:\n parameterId: parameter\n format: JSON\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Parameter With Labels\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst parameter_with_labels = new gcp.parametermanager.Parameter(\"parameter-with-labels\", {\n parameterId: \"parameter\",\n labels: {\n key1: \"val1\",\n key2: \"val2\",\n key3: \"val3\",\n key4: \"val4\",\n key5: \"val5\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nparameter_with_labels = gcp.parametermanager.Parameter(\"parameter-with-labels\",\n parameter_id=\"parameter\",\n labels={\n \"key1\": \"val1\",\n \"key2\": \"val2\",\n \"key3\": \"val3\",\n \"key4\": \"val4\",\n \"key5\": \"val5\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var parameter_with_labels = new Gcp.ParameterManager.Parameter(\"parameter-with-labels\", new()\n {\n ParameterId = \"parameter\",\n Labels = \n {\n { \"key1\", \"val1\" },\n { \"key2\", \"val2\" },\n { \"key3\", \"val3\" },\n { \"key4\", \"val4\" },\n { \"key5\", \"val5\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewParameter(ctx, \"parameter-with-labels\", \u0026parametermanager.ParameterArgs{\n\t\t\tParameterId: pulumi.String(\"parameter\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"val1\"),\n\t\t\t\t\"key2\": pulumi.String(\"val2\"),\n\t\t\t\t\"key3\": pulumi.String(\"val3\"),\n\t\t\t\t\"key4\": pulumi.String(\"val4\"),\n\t\t\t\t\"key5\": pulumi.String(\"val5\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.Parameter;\nimport com.pulumi.gcp.parametermanager.ParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var parameter_with_labels = new Parameter(\"parameter-with-labels\", ParameterArgs.builder()\n .parameterId(\"parameter\")\n .labels(Map.ofEntries(\n Map.entry(\"key1\", \"val1\"),\n Map.entry(\"key2\", \"val2\"),\n Map.entry(\"key3\", \"val3\"),\n Map.entry(\"key4\", \"val4\"),\n Map.entry(\"key5\", \"val5\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parameter-with-labels:\n type: gcp:parametermanager:Parameter\n properties:\n parameterId: parameter\n labels:\n key1: val1\n key2: val2\n key3: val3\n key4: val4\n key5: val5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nParameter can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/parameters/{{parameter_id}}`\n\n* `{{project}}/{{parameter_id}}`\n\n* `{{parameter_id}}`\n\nWhen using the `pulumi import` command, Parameter can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}}\n```\n\n```sh\n$ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}}\n```\n\n```sh\n$ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}}\n```\n\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the Parameter was created.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "format": { + "type": "string", + "description": "The format type of the parameter resource.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Parameter. Format:\n`projects/{{project}}/locations/global/parameters/{{parameter_id}}`\n" + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n" + }, + "policyMembers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:parametermanager/ParameterPolicyMember:ParameterPolicyMember" + }, + "description": "Policy member strings of a Google Cloud resource.\nStructure is documented below.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the Parameter was updated.\n" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "name", + "parameterId", + "policyMembers", + "project", + "pulumiLabels", + "updateTime" + ], + "inputProperties": { + "format": { + "type": "string", + "description": "The format type of the parameter resource.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "parameterId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Parameter resources.\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the Parameter was created.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "format": { + "type": "string", + "description": "The format type of the parameter resource.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Parameter. Format:\n`projects/{{project}}/locations/global/parameters/{{parameter_id}}`\n" + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "policyMembers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:parametermanager/ParameterPolicyMember:ParameterPolicyMember" + }, + "description": "Policy member strings of a Google Cloud resource.\nStructure is documented below.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the Parameter was updated.\n" + } + }, + "type": "object" + } + }, + "gcp:parametermanager/regionalParameter:RegionalParameter": { + "description": "## Example Usage\n\n### Regional Parameter Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst regional_parameter_basic = new gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\", {\n parameterId: \"regional_parameter\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregional_parameter_basic = gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\",\n parameter_id=\"regional_parameter\",\n 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 regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-basic\", new()\n {\n ParameterId = \"regional_parameter\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-basic\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\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.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_basic = new RegionalParameter(\"regional-parameter-basic\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-basic:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Regional Parameter With Format\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst regional_parameter_with_format = new gcp.parametermanager.RegionalParameter(\"regional-parameter-with-format\", {\n parameterId: \"regional_parameter\",\n location: \"us-central1\",\n format: \"JSON\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregional_parameter_with_format = gcp.parametermanager.RegionalParameter(\"regional-parameter-with-format\",\n parameter_id=\"regional_parameter\",\n location=\"us-central1\",\n format=\"JSON\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var regional_parameter_with_format = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-with-format\", new()\n {\n ParameterId = \"regional_parameter\",\n Location = \"us-central1\",\n Format = \"JSON\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-with-format\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tFormat: pulumi.String(\"JSON\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_with_format = new RegionalParameter(\"regional-parameter-with-format\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .location(\"us-central1\")\n .format(\"JSON\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-with-format:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n location: us-central1\n format: JSON\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Regional Parameter With Labels\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst regional_parameter_with_labels = new gcp.parametermanager.RegionalParameter(\"regional-parameter-with-labels\", {\n parameterId: \"regional_parameter\",\n location: \"us-central1\",\n labels: {\n key1: \"val1\",\n key2: \"val2\",\n key3: \"val3\",\n key4: \"val4\",\n key5: \"val5\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregional_parameter_with_labels = gcp.parametermanager.RegionalParameter(\"regional-parameter-with-labels\",\n parameter_id=\"regional_parameter\",\n location=\"us-central1\",\n labels={\n \"key1\": \"val1\",\n \"key2\": \"val2\",\n \"key3\": \"val3\",\n \"key4\": \"val4\",\n \"key5\": \"val5\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var regional_parameter_with_labels = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-with-labels\", new()\n {\n ParameterId = \"regional_parameter\",\n Location = \"us-central1\",\n Labels = \n {\n { \"key1\", \"val1\" },\n { \"key2\", \"val2\" },\n { \"key3\", \"val3\" },\n { \"key4\", \"val4\" },\n { \"key5\", \"val5\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-with-labels\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"val1\"),\n\t\t\t\t\"key2\": pulumi.String(\"val2\"),\n\t\t\t\t\"key3\": pulumi.String(\"val3\"),\n\t\t\t\t\"key4\": pulumi.String(\"val4\"),\n\t\t\t\t\"key5\": pulumi.String(\"val5\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_with_labels = new RegionalParameter(\"regional-parameter-with-labels\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .location(\"us-central1\")\n .labels(Map.ofEntries(\n Map.entry(\"key1\", \"val1\"),\n Map.entry(\"key2\", \"val2\"),\n Map.entry(\"key3\", \"val3\"),\n Map.entry(\"key4\", \"val4\"),\n Map.entry(\"key5\", \"val5\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-with-labels:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n location: us-central1\n labels:\n key1: val1\n key2: val2\n key3: val3\n key4: val4\n key5: val5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionalParameter can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}`\n\n* `{{project}}/{{location}}/{{parameter_id}}`\n\n* `{{location}}/{{parameter_id}}`\n\nWhen using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}\n```\n\n```sh\n$ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}}\n```\n\n```sh\n$ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}}\n```\n\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the regional Parameter was created.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "format": { + "type": "string", + "description": "The format type of the regional parameter.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this regional Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the regional parameter. eg us-central1\n" + }, + "name": { + "type": "string", + "description": "The resource name of the regional Parameter. Format:\n`projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}`\n" + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n" + }, + "policyMembers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:parametermanager/RegionalParameterPolicyMember:RegionalParameterPolicyMember" + }, + "description": "An object containing a unique resource identity tied to the regional parameter.\nStructure is documented below.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the regional Parameter was updated.\n" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "location", + "name", + "parameterId", + "policyMembers", + "project", + "pulumiLabels", + "updateTime" + ], + "inputProperties": { + "format": { + "type": "string", + "description": "The format type of the regional parameter.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this regional Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the regional parameter. eg us-central1\n", + "willReplaceOnChanges": true + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "location", + "parameterId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering RegionalParameter resources.\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the regional Parameter was created.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "format": { + "type": "string", + "description": "The format type of the regional parameter.\nDefault value is `UNFORMATTED`.\nPossible values are: `UNFORMATTED`, `YAML`, `JSON`.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels assigned to this regional Parameter.\nLabel keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62}\nLabel values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,\nand must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\nNo more than 64 labels can be assigned to a given resource.\nAn object containing a list of \"key\": value pairs. Example:\n{ \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the regional parameter. eg us-central1\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The resource name of the regional Parameter. Format:\n`projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}`\n" + }, + "parameterId": { + "type": "string", + "description": "This must be unique within the project.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "policyMembers": { + "type": "array", + "items": { + "$ref": "#/types/gcp:parametermanager/RegionalParameterPolicyMember:RegionalParameterPolicyMember" + }, + "description": "An object containing a unique resource identity tied to the regional parameter.\nStructure is documented below.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the regional Parameter was updated.\n" + } + }, + "type": "object" + } + }, + "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion": { + "description": "## Example Usage\n\n### Regional Parameter Version Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst regional_parameter_basic = new gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\", {\n parameterId: \"regional_parameter\",\n location: \"us-central1\",\n});\nconst regional_parameter_version_basic = new gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-basic\", {\n parameter: regional_parameter_basic.id,\n parameterVersionId: \"regional_parameter_version\",\n parameterData: \"regional-parameter-version-data\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregional_parameter_basic = gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\",\n parameter_id=\"regional_parameter\",\n location=\"us-central1\")\nregional_parameter_version_basic = gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-basic\",\n parameter=regional_parameter_basic.id,\n parameter_version_id=\"regional_parameter_version\",\n parameter_data=\"regional-parameter-version-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 regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-basic\", new()\n {\n ParameterId = \"regional_parameter\",\n Location = \"us-central1\",\n });\n\n var regional_parameter_version_basic = new Gcp.ParameterManager.RegionalParameterVersion(\"regional-parameter-version-basic\", new()\n {\n Parameter = regional_parameter_basic.Id,\n ParameterVersionId = \"regional_parameter_version\",\n ParameterData = \"regional-parameter-version-data\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-basic\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\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\t_, err = parametermanager.NewRegionalParameterVersion(ctx, \"regional-parameter-version-basic\", \u0026parametermanager.RegionalParameterVersionArgs{\n\t\t\tParameter: regional_parameter_basic.ID(),\n\t\t\tParameterVersionId: pulumi.String(\"regional_parameter_version\"),\n\t\t\tParameterData: pulumi.String(\"regional-parameter-version-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersion;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_basic = new RegionalParameter(\"regional-parameter-basic\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .location(\"us-central1\")\n .build());\n\n var regional_parameter_version_basic = new RegionalParameterVersion(\"regional-parameter-version-basic\", RegionalParameterVersionArgs.builder()\n .parameter(regional_parameter_basic.id())\n .parameterVersionId(\"regional_parameter_version\")\n .parameterData(\"regional-parameter-version-data\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-basic:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n location: us-central1\n regional-parameter-version-basic:\n type: gcp:parametermanager:RegionalParameterVersion\n properties:\n parameter: ${[\"regional-parameter-basic\"].id}\n parameterVersionId: regional_parameter_version\n parameterData: regional-parameter-version-data\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Regional Parameter Version With Json Format\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst regional_parameter_basic = new gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\", {\n parameterId: \"regional_parameter\",\n format: \"JSON\",\n location: \"us-central1\",\n});\nconst regional_parameter_version_with_json_format = new gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-with-json-format\", {\n parameter: regional_parameter_basic.id,\n parameterVersionId: \"regional_parameter_version\",\n parameterData: std.file({\n input: \"parameter_data_json_format.yaml\",\n }).then(invoke =\u003e invoke.result),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nregional_parameter_basic = gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\",\n parameter_id=\"regional_parameter\",\n format=\"JSON\",\n location=\"us-central1\")\nregional_parameter_version_with_json_format = gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-with-json-format\",\n parameter=regional_parameter_basic.id,\n parameter_version_id=\"regional_parameter_version\",\n parameter_data=std.file(input=\"parameter_data_json_format.yaml\").result)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-basic\", new()\n {\n ParameterId = \"regional_parameter\",\n Format = \"JSON\",\n Location = \"us-central1\",\n });\n\n var regional_parameter_version_with_json_format = new Gcp.ParameterManager.RegionalParameterVersion(\"regional-parameter-version-with-json-format\", new()\n {\n Parameter = regional_parameter_basic.Id,\n ParameterVersionId = \"regional_parameter_version\",\n ParameterData = Std.File.Invoke(new()\n {\n Input = \"parameter_data_json_format.yaml\",\n }).Apply(invoke =\u003e invoke.Result),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\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\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-basic\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\n\t\t\tFormat: pulumi.String(\"JSON\"),\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\tinvokeFile, err := std.File(ctx, \u0026std.FileArgs{\n\t\t\tInput: \"parameter_data_json_format.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = parametermanager.NewRegionalParameterVersion(ctx, \"regional-parameter-version-with-json-format\", \u0026parametermanager.RegionalParameterVersionArgs{\n\t\t\tParameter: regional_parameter_basic.ID(),\n\t\t\tParameterVersionId: pulumi.String(\"regional_parameter_version\"),\n\t\t\tParameterData: pulumi.String(invokeFile.Result),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersion;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_basic = new RegionalParameter(\"regional-parameter-basic\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .format(\"JSON\")\n .location(\"us-central1\")\n .build());\n\n var regional_parameter_version_with_json_format = new RegionalParameterVersion(\"regional-parameter-version-with-json-format\", RegionalParameterVersionArgs.builder()\n .parameter(regional_parameter_basic.id())\n .parameterVersionId(\"regional_parameter_version\")\n .parameterData(StdFunctions.file(FileArgs.builder()\n .input(\"parameter_data_json_format.yaml\")\n .build()).result())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-basic:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n format: JSON\n location: us-central1\n regional-parameter-version-with-json-format:\n type: gcp:parametermanager:RegionalParameterVersion\n properties:\n parameter: ${[\"regional-parameter-basic\"].id}\n parameterVersionId: regional_parameter_version\n parameterData:\n fn::invoke:\n function: std:file\n arguments:\n input: parameter_data_json_format.yaml\n return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Regional Parameter Version With Yaml Format\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst regional_parameter_basic = new gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\", {\n parameterId: \"regional_parameter\",\n format: \"YAML\",\n location: \"us-central1\",\n});\nconst regional_parameter_version_with_yaml_format = new gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-with-yaml-format\", {\n parameter: regional_parameter_basic.id,\n parameterVersionId: \"regional_parameter_version\",\n parameterData: std.file({\n input: \"parameter_data_yaml_format.yaml\",\n }).then(invoke =\u003e invoke.result),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nregional_parameter_basic = gcp.parametermanager.RegionalParameter(\"regional-parameter-basic\",\n parameter_id=\"regional_parameter\",\n format=\"YAML\",\n location=\"us-central1\")\nregional_parameter_version_with_yaml_format = gcp.parametermanager.RegionalParameterVersion(\"regional-parameter-version-with-yaml-format\",\n parameter=regional_parameter_basic.id,\n parameter_version_id=\"regional_parameter_version\",\n parameter_data=std.file(input=\"parameter_data_yaml_format.yaml\").result)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter(\"regional-parameter-basic\", new()\n {\n ParameterId = \"regional_parameter\",\n Format = \"YAML\",\n Location = \"us-central1\",\n });\n\n var regional_parameter_version_with_yaml_format = new Gcp.ParameterManager.RegionalParameterVersion(\"regional-parameter-version-with-yaml-format\", new()\n {\n Parameter = regional_parameter_basic.Id,\n ParameterVersionId = \"regional_parameter_version\",\n ParameterData = Std.File.Invoke(new()\n {\n Input = \"parameter_data_yaml_format.yaml\",\n }).Apply(invoke =\u003e invoke.Result),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\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\t_, err := parametermanager.NewRegionalParameter(ctx, \"regional-parameter-basic\", \u0026parametermanager.RegionalParameterArgs{\n\t\t\tParameterId: pulumi.String(\"regional_parameter\"),\n\t\t\tFormat: pulumi.String(\"YAML\"),\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\tinvokeFile, err := std.File(ctx, \u0026std.FileArgs{\n\t\t\tInput: \"parameter_data_yaml_format.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = parametermanager.NewRegionalParameterVersion(ctx, \"regional-parameter-version-with-yaml-format\", \u0026parametermanager.RegionalParameterVersionArgs{\n\t\t\tParameter: regional_parameter_basic.ID(),\n\t\t\tParameterVersionId: pulumi.String(\"regional_parameter_version\"),\n\t\t\tParameterData: pulumi.String(invokeFile.Result),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.parametermanager.RegionalParameter;\nimport com.pulumi.gcp.parametermanager.RegionalParameterArgs;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersion;\nimport com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var regional_parameter_basic = new RegionalParameter(\"regional-parameter-basic\", RegionalParameterArgs.builder()\n .parameterId(\"regional_parameter\")\n .format(\"YAML\")\n .location(\"us-central1\")\n .build());\n\n var regional_parameter_version_with_yaml_format = new RegionalParameterVersion(\"regional-parameter-version-with-yaml-format\", RegionalParameterVersionArgs.builder()\n .parameter(regional_parameter_basic.id())\n .parameterVersionId(\"regional_parameter_version\")\n .parameterData(StdFunctions.file(FileArgs.builder()\n .input(\"parameter_data_yaml_format.yaml\")\n .build()).result())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regional-parameter-basic:\n type: gcp:parametermanager:RegionalParameter\n properties:\n parameterId: regional_parameter\n format: YAML\n location: us-central1\n regional-parameter-version-with-yaml-format:\n type: gcp:parametermanager:RegionalParameterVersion\n properties:\n parameter: ${[\"regional-parameter-basic\"].id}\n parameterVersionId: regional_parameter_version\n parameterData:\n fn::invoke:\n function: std:file\n arguments:\n input: parameter_data_yaml_format.yaml\n return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionalParameterVersion can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}`\n\nWhen using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}\n```\n\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the Regional Parameter Version was created.\n" + }, + "disabled": { + "type": "boolean", + "description": "The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version.\n" + }, + "location": { + "type": "string", + "description": "Location of Parameter Manager Regional parameter resource.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Regional Parameter Version. Format:\n`projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}`\n" + }, + "parameter": { + "type": "string", + "description": "Parameter Manager Regional Parameter resource.\n" + }, + "parameterData": { + "type": "string", + "description": "The Regional Parameter data.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true + }, + "parameterVersionId": { + "type": "string", + "description": "Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter.\n\n\n- - -\n" + }, + "updateTime": { + "type": "string", + "description": "The time at which the Regional Parameter Version was updated.\n" + } + }, + "required": [ + "createTime", + "location", + "name", + "parameter", + "parameterData", + "parameterVersionId", + "updateTime" + ], + "inputProperties": { + "disabled": { + "type": "boolean", + "description": "The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version.\n" + }, + "parameter": { + "type": "string", + "description": "Parameter Manager Regional Parameter resource.\n", + "willReplaceOnChanges": true + }, + "parameterData": { + "type": "string", + "description": "The Regional Parameter data.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true, + "willReplaceOnChanges": true + }, + "parameterVersionId": { + "type": "string", + "description": "Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter.\n\n\n- - -\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "parameter", + "parameterData", + "parameterVersionId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering RegionalParameterVersion resources.\n", + "properties": { + "createTime": { + "type": "string", + "description": "The time at which the Regional Parameter Version was created.\n" + }, + "disabled": { + "type": "boolean", + "description": "The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version.\n" + }, + "location": { + "type": "string", + "description": "Location of Parameter Manager Regional parameter resource.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the Regional Parameter Version. Format:\n`projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}`\n" + }, + "parameter": { + "type": "string", + "description": "Parameter Manager Regional Parameter resource.\n", + "willReplaceOnChanges": true + }, + "parameterData": { + "type": "string", + "description": "The Regional Parameter data.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true, + "willReplaceOnChanges": true + }, + "parameterVersionId": { + "type": "string", + "description": "Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "updateTime": { + "type": "string", + "description": "The time at which the Regional Parameter Version was updated.\n" + } + }, + "type": "object" + } + }, "gcp:privilegedaccessmanager/entitlement:entitlement": { "description": "An Entitlement defines the eligibility of a set of users to obtain a predefined access for some time possibly after going through an approval workflow.\n\n\n\n## Example Usage\n\n### Privileged Access Manager Entitlement Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tfentitlement = new gcp.privilegedaccessmanager.Entitlement(\"tfentitlement\", {\n entitlementId: \"example-entitlement\",\n location: \"global\",\n maxRequestDuration: \"43200s\",\n parent: \"projects/my-project-name\",\n requesterJustificationConfig: {\n unstructured: {},\n },\n eligibleUsers: [{\n principals: [\"group:test@google.com\"],\n }],\n privilegedAccess: {\n gcpIamAccess: {\n roleBindings: [{\n role: \"roles/storage.admin\",\n conditionExpression: \"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n }],\n resource: \"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n resourceType: \"cloudresourcemanager.googleapis.com/Project\",\n },\n },\n additionalNotificationTargets: {\n adminEmailRecipients: [\"user@example.com\"],\n requesterEmailRecipients: [\"user@example.com\"],\n },\n approvalWorkflow: {\n manualApprovals: {\n requireApproverJustification: true,\n steps: [{\n approvalsNeeded: 1,\n approverEmailRecipients: [\"user@example.com\"],\n approvers: {\n principals: [\"group:test@google.com\"],\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntfentitlement = gcp.privilegedaccessmanager.Entitlement(\"tfentitlement\",\n entitlement_id=\"example-entitlement\",\n location=\"global\",\n max_request_duration=\"43200s\",\n parent=\"projects/my-project-name\",\n requester_justification_config={\n \"unstructured\": {},\n },\n eligible_users=[{\n \"principals\": [\"group:test@google.com\"],\n }],\n privileged_access={\n \"gcp_iam_access\": {\n \"role_bindings\": [{\n \"role\": \"roles/storage.admin\",\n \"condition_expression\": \"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n }],\n \"resource\": \"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n \"resource_type\": \"cloudresourcemanager.googleapis.com/Project\",\n },\n },\n additional_notification_targets={\n \"admin_email_recipients\": [\"user@example.com\"],\n \"requester_email_recipients\": [\"user@example.com\"],\n },\n approval_workflow={\n \"manual_approvals\": {\n \"require_approver_justification\": True,\n \"steps\": [{\n \"approvals_needed\": 1,\n \"approver_email_recipients\": [\"user@example.com\"],\n \"approvers\": {\n \"principals\": [\"group:test@google.com\"],\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 tfentitlement = new Gcp.PrivilegedAccessManager.Entitlement(\"tfentitlement\", new()\n {\n EntitlementId = \"example-entitlement\",\n Location = \"global\",\n MaxRequestDuration = \"43200s\",\n Parent = \"projects/my-project-name\",\n RequesterJustificationConfig = new Gcp.PrivilegedAccessManager.Inputs.EntitlementRequesterJustificationConfigArgs\n {\n Unstructured = null,\n },\n EligibleUsers = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementEligibleUserArgs\n {\n Principals = new[]\n {\n \"group:test@google.com\",\n },\n },\n },\n PrivilegedAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessArgs\n {\n GcpIamAccess = new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessArgs\n {\n RoleBindings = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs\n {\n Role = \"roles/storage.admin\",\n ConditionExpression = \"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\",\n },\n },\n Resource = \"//cloudresourcemanager.googleapis.com/projects/my-project-name\",\n ResourceType = \"cloudresourcemanager.googleapis.com/Project\",\n },\n },\n AdditionalNotificationTargets = new Gcp.PrivilegedAccessManager.Inputs.EntitlementAdditionalNotificationTargetsArgs\n {\n AdminEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n RequesterEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n },\n ApprovalWorkflow = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowArgs\n {\n ManualApprovals = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsArgs\n {\n RequireApproverJustification = true,\n Steps = new[]\n {\n new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepArgs\n {\n ApprovalsNeeded = 1,\n ApproverEmailRecipients = new[]\n {\n \"user@example.com\",\n },\n Approvers = new Gcp.PrivilegedAccessManager.Inputs.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs\n {\n Principals = new[]\n {\n \"group:test@google.com\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/privilegedaccessmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := privilegedaccessmanager.Newentitlement(ctx, \"tfentitlement\", \u0026privilegedaccessmanager.entitlementArgs{\n\t\t\tEntitlementId: pulumi.String(\"example-entitlement\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tMaxRequestDuration: pulumi.String(\"43200s\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tRequesterJustificationConfig: \u0026privilegedaccessmanager.EntitlementRequesterJustificationConfigArgs{\n\t\t\t\tUnstructured: \u0026privilegedaccessmanager.EntitlementRequesterJustificationConfigUnstructuredArgs{},\n\t\t\t},\n\t\t\tEligibleUsers: privilegedaccessmanager.EntitlementEligibleUserArray{\n\t\t\t\t\u0026privilegedaccessmanager.EntitlementEligibleUserArgs{\n\t\t\t\t\tPrincipals: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"group:test@google.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPrivilegedAccess: \u0026privilegedaccessmanager.EntitlementPrivilegedAccessArgs{\n\t\t\t\tGcpIamAccess: \u0026privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessArgs{\n\t\t\t\t\tRoleBindings: privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArray{\n\t\t\t\t\t\t\u0026privilegedaccessmanager.EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs{\n\t\t\t\t\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\t\t\t\t\tConditionExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tResource: pulumi.String(\"//cloudresourcemanager.googleapis.com/projects/my-project-name\"),\n\t\t\t\t\tResourceType: pulumi.String(\"cloudresourcemanager.googleapis.com/Project\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAdditionalNotificationTargets: \u0026privilegedaccessmanager.EntitlementAdditionalNotificationTargetsArgs{\n\t\t\t\tAdminEmailRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t},\n\t\t\t\tRequesterEmailRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tApprovalWorkflow: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowArgs{\n\t\t\t\tManualApprovals: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsArgs{\n\t\t\t\t\tRequireApproverJustification: pulumi.Bool(true),\n\t\t\t\t\tSteps: privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArray{\n\t\t\t\t\t\t\u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepArgs{\n\t\t\t\t\t\t\tApprovalsNeeded: pulumi.Int(1),\n\t\t\t\t\t\t\tApproverEmailRecipients: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"user@example.com\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tApprovers: \u0026privilegedaccessmanager.EntitlementApprovalWorkflowManualApprovalsStepApproversArgs{\n\t\t\t\t\t\t\t\tPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"group:test@google.com\"),\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.privilegedaccessmanager.entitlement;\nimport com.pulumi.gcp.privilegedaccessmanager.EntitlementArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementRequesterJustificationConfigUnstructuredArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementEligibleUserArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementPrivilegedAccessGcpIamAccessArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementAdditionalNotificationTargetsArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowArgs;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.EntitlementApprovalWorkflowManualApprovalsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var tfentitlement = new Entitlement(\"tfentitlement\", EntitlementArgs.builder()\n .entitlementId(\"example-entitlement\")\n .location(\"global\")\n .maxRequestDuration(\"43200s\")\n .parent(\"projects/my-project-name\")\n .requesterJustificationConfig(EntitlementRequesterJustificationConfigArgs.builder()\n .unstructured()\n .build())\n .eligibleUsers(EntitlementEligibleUserArgs.builder()\n .principals(\"group:test@google.com\")\n .build())\n .privilegedAccess(EntitlementPrivilegedAccessArgs.builder()\n .gcpIamAccess(EntitlementPrivilegedAccessGcpIamAccessArgs.builder()\n .roleBindings(EntitlementPrivilegedAccessGcpIamAccessRoleBindingArgs.builder()\n .role(\"roles/storage.admin\")\n .conditionExpression(\"request.time \u003c timestamp(\\\"2024-04-23T18:30:00.000Z\\\")\")\n .build())\n .resource(\"//cloudresourcemanager.googleapis.com/projects/my-project-name\")\n .resourceType(\"cloudresourcemanager.googleapis.com/Project\")\n .build())\n .build())\n .additionalNotificationTargets(EntitlementAdditionalNotificationTargetsArgs.builder()\n .adminEmailRecipients(\"user@example.com\")\n .requesterEmailRecipients(\"user@example.com\")\n .build())\n .approvalWorkflow(EntitlementApprovalWorkflowArgs.builder()\n .manualApprovals(EntitlementApprovalWorkflowManualApprovalsArgs.builder()\n .requireApproverJustification(true)\n .steps(EntitlementApprovalWorkflowManualApprovalsStepArgs.builder()\n .approvalsNeeded(1)\n .approverEmailRecipients(\"user@example.com\")\n .approvers(EntitlementApprovalWorkflowManualApprovalsStepApproversArgs.builder()\n .principals(\"group:test@google.com\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tfentitlement:\n type: gcp:privilegedaccessmanager:entitlement\n properties:\n entitlementId: example-entitlement\n location: global\n maxRequestDuration: 43200s\n parent: projects/my-project-name\n requesterJustificationConfig:\n unstructured: {}\n eligibleUsers:\n - principals:\n - group:test@google.com\n privilegedAccess:\n gcpIamAccess:\n roleBindings:\n - role: roles/storage.admin\n conditionExpression: request.time \u003c timestamp(\"2024-04-23T18:30:00.000Z\")\n resource: //cloudresourcemanager.googleapis.com/projects/my-project-name\n resourceType: cloudresourcemanager.googleapis.com/Project\n additionalNotificationTargets:\n adminEmailRecipients:\n - user@example.com\n requesterEmailRecipients:\n - user@example.com\n approvalWorkflow:\n manualApprovals:\n requireApproverJustification: true\n steps:\n - approvalsNeeded: 1\n approverEmailRecipients:\n - user@example.com\n approvers:\n principals:\n - group:test@google.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEntitlement can be imported using any of these accepted formats:\n\n* `{{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}`\n\nWhen using the `pulumi import` command, Entitlement can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:privilegedaccessmanager/entitlement:entitlement default {{parent}}/locations/{{location}}/entitlements/{{entitlement_id}}\n```\n\n", "properties": { @@ -261709,7 +263926,7 @@ } }, "gcp:pubsub/subscription:Subscription": { - "description": "A named resource representing the stream of messages from a single,\nspecific topic, to be delivered to the subscribing application.\n\n\nTo get more information about Subscription, see:\n\n* [API documentation](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions)\n* How-to Guides\n * [Managing Subscriptions](https://cloud.google.com/pubsub/docs/admin#managing_subscriptions)\n\n\u003e **Note:** You can retrieve the email of the Google Managed Pub/Sub Service Account used for forwarding\nby using the `gcp.projects.ServiceIdentity` resource.\n\n## Example Usage\n\n### Pubsub Subscription Push\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n ackDeadlineSeconds: 20,\n labels: {\n foo: \"bar\",\n },\n pushConfig: {\n pushEndpoint: \"https://example.com/push\",\n attributes: {\n \"x-goog-version\": \"v1\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n ack_deadline_seconds=20,\n labels={\n \"foo\": \"bar\",\n },\n push_config={\n \"push_endpoint\": \"https://example.com/push\",\n \"attributes\": {\n \"x-goog-version\": \"v1\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n AckDeadlineSeconds = 20,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs\n {\n PushEndpoint = \"https://example.com/push\",\n Attributes = \n {\n { \"x-goog-version\", \"v1\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPushConfig: \u0026pubsub.SubscriptionPushConfigArgs{\n\t\t\t\tPushEndpoint: pulumi.String(\"https://example.com/push\"),\n\t\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\t\"x-goog-version\": pulumi.String(\"v1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .ackDeadlineSeconds(20)\n .labels(Map.of(\"foo\", \"bar\"))\n .pushConfig(SubscriptionPushConfigArgs.builder()\n .pushEndpoint(\"https://example.com/push\")\n .attributes(Map.of(\"x-goog-version\", \"v1\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n ackDeadlineSeconds: 20\n labels:\n foo: bar\n pushConfig:\n pushEndpoint: https://example.com/push\n attributes:\n x-goog-version: v1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n messageRetentionDuration: \"1200s\",\n retainAckedMessages: true,\n ackDeadlineSeconds: 20,\n expirationPolicy: {\n ttl: \"300000.5s\",\n },\n retryPolicy: {\n minimumBackoff: \"10s\",\n },\n enableMessageOrdering: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n message_retention_duration=\"1200s\",\n retain_acked_messages=True,\n ack_deadline_seconds=20,\n expiration_policy={\n \"ttl\": \"300000.5s\",\n },\n retry_policy={\n \"minimum_backoff\": \"10s\",\n },\n enable_message_ordering=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n MessageRetentionDuration = \"1200s\",\n RetainAckedMessages = true,\n AckDeadlineSeconds = 20,\n ExpirationPolicy = new Gcp.PubSub.Inputs.SubscriptionExpirationPolicyArgs\n {\n Ttl = \"300000.5s\",\n },\n RetryPolicy = new Gcp.PubSub.Inputs.SubscriptionRetryPolicyArgs\n {\n MinimumBackoff = \"10s\",\n },\n EnableMessageOrdering = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMessageRetentionDuration: pulumi.String(\"1200s\"),\n\t\t\tRetainAckedMessages: pulumi.Bool(true),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tExpirationPolicy: \u0026pubsub.SubscriptionExpirationPolicyArgs{\n\t\t\t\tTtl: pulumi.String(\"300000.5s\"),\n\t\t\t},\n\t\t\tRetryPolicy: \u0026pubsub.SubscriptionRetryPolicyArgs{\n\t\t\t\tMinimumBackoff: pulumi.String(\"10s\"),\n\t\t\t},\n\t\t\tEnableMessageOrdering: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionExpirationPolicyArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionRetryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .messageRetentionDuration(\"1200s\")\n .retainAckedMessages(true)\n .ackDeadlineSeconds(20)\n .expirationPolicy(SubscriptionExpirationPolicyArgs.builder()\n .ttl(\"300000.5s\")\n .build())\n .retryPolicy(SubscriptionRetryPolicyArgs.builder()\n .minimumBackoff(\"10s\")\n .build())\n .enableMessageOrdering(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n messageRetentionDuration: 1200s\n retainAckedMessages: true\n ackDeadlineSeconds: 20\n expirationPolicy:\n ttl: 300000.5s\n retryPolicy:\n minimumBackoff: 10s\n enableMessageOrdering: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n filter: ` attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n`,\n ackDeadlineSeconds: 20,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n filter=\"\"\" attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n\"\"\",\n ack_deadline_seconds=20)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Filter = @\" attributes.foo = \"\"foo\"\"\n AND attributes.bar = \"\"bar\"\"\n\",\n AckDeadlineSeconds = 20,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\" attributes.foo = \\\"foo\\\"\\n AND attributes.bar = \\\"bar\\\"\\n\"),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .filter(\"\"\"\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n \"\"\")\n .ackDeadlineSeconds(20)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n filter: |2\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n ackDeadlineSeconds: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Dead Letter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleDeadLetter = new gcp.pubsub.Topic(\"example_dead_letter\", {name: \"example-topic-dead-letter\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n deadLetterPolicy: {\n deadLetterTopic: exampleDeadLetter.id,\n maxDeliveryAttempts: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_dead_letter = gcp.pubsub.Topic(\"example_dead_letter\", name=\"example-topic-dead-letter\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n dead_letter_policy={\n \"dead_letter_topic\": example_dead_letter.id,\n \"max_delivery_attempts\": 10,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleDeadLetter = new Gcp.PubSub.Topic(\"example_dead_letter\", new()\n {\n Name = \"example-topic-dead-letter\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n DeadLetterPolicy = new Gcp.PubSub.Inputs.SubscriptionDeadLetterPolicyArgs\n {\n DeadLetterTopic = exampleDeadLetter.Id,\n MaxDeliveryAttempts = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeadLetter, err := pubsub.NewTopic(ctx, \"example_dead_letter\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic-dead-letter\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tDeadLetterPolicy: \u0026pubsub.SubscriptionDeadLetterPolicyArgs{\n\t\t\t\tDeadLetterTopic: exampleDeadLetter.ID(),\n\t\t\t\tMaxDeliveryAttempts: pulumi.Int(10),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionDeadLetterPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleDeadLetter = new Topic(\"exampleDeadLetter\", TopicArgs.builder()\n .name(\"example-topic-dead-letter\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .deadLetterPolicy(SubscriptionDeadLetterPolicyArgs.builder()\n .deadLetterTopic(exampleDeadLetter.id())\n .maxDeliveryAttempts(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleDeadLetter:\n type: gcp:pubsub:Topic\n name: example_dead_letter\n properties:\n name: example-topic-dead-letter\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n deadLetterPolicy:\n deadLetterTopic: ${exampleDeadLetter.id}\n maxDeliveryAttempts: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Table Schema\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n useTableSchema: true,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"use_table_schema\": True,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n UseTableSchema = true,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tUseTableSchema: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .useTableSchema(true)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n useTableSchema: true\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst bqWriteServiceAccount = new gcp.serviceaccount.Account(\"bq_write_service_account\", {\n accountId: \"example-bqw\",\n displayName: \"BQ Write Service Account\",\n});\nconst project = gcp.organizations.getProject({});\nconst bigqueryMetadataViewer = new gcp.projects.IAMMember(\"bigquery_metadata_viewer\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.metadataViewer\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst bigqueryDataEditor = new gcp.projects.IAMMember(\"bigquery_data_editor\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.dataEditor\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n serviceAccountEmail: bqWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nbq_write_service_account = gcp.serviceaccount.Account(\"bq_write_service_account\",\n account_id=\"example-bqw\",\n display_name=\"BQ Write Service Account\")\nproject = gcp.organizations.get_project()\nbigquery_metadata_viewer = gcp.projects.IAMMember(\"bigquery_metadata_viewer\",\n project=project.project_id,\n role=\"roles/bigquery.metadataViewer\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nbigquery_data_editor = gcp.projects.IAMMember(\"bigquery_data_editor\",\n project=project.project_id,\n role=\"roles/bigquery.dataEditor\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"service_account_email\": bq_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n bq_write_service_account,\n bigquery_metadata_viewer,\n bigquery_data_editor,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var bqWriteServiceAccount = new Gcp.ServiceAccount.Account(\"bq_write_service_account\", new()\n {\n AccountId = \"example-bqw\",\n DisplayName = \"BQ Write Service Account\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var bigqueryMetadataViewer = new Gcp.Projects.IAMMember(\"bigquery_metadata_viewer\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.metadataViewer\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var bigqueryDataEditor = new Gcp.Projects.IAMMember(\"bigquery_data_editor\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.dataEditor\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n ServiceAccountEmail = bqWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"bq_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-bqw\"),\n\t\t\tDisplayName: pulumi.String(\"BQ Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryMetadataViewer, err := projects.NewIAMMember(ctx, \"bigquery_metadata_viewer\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.metadataViewer\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryDataEditor, err := projects.NewIAMMember(ctx, \"bigquery_data_editor\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataEditor\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tServiceAccountEmail: bqWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbqWriteServiceAccount,\n\t\t\tbigqueryMetadataViewer,\n\t\t\tbigqueryDataEditor,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var bqWriteServiceAccount = new Account(\"bqWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-bqw\")\n .displayName(\"BQ Write Service Account\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var bigqueryMetadataViewer = new IAMMember(\"bigqueryMetadataViewer\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.metadataViewer\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var bigqueryDataEditor = new IAMMember(\"bigqueryDataEditor\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.dataEditor\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .deletionProtection(false)\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project.applyValue(getProjectResult -\u003e getProjectResult),datasetId,tableId);\n }))\n .serviceAccountEmail(bqWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n serviceAccountEmail: ${bqWriteServiceAccount.email}\n options:\n dependsOn:\n - ${bqWriteServiceAccount}\n - ${bigqueryMetadataViewer}\n - ${bigqueryDataEditor}\n bqWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: bq_write_service_account\n properties:\n accountId: example-bqw\n displayName: BQ Write Service Account\n bigqueryMetadataViewer:\n type: gcp:projects:IAMMember\n name: bigquery_metadata_viewer\n properties:\n project: ${project.projectId}\n role: roles/bigquery.metadataViewer\n member: serviceAccount:${bqWriteServiceAccount.email}\n bigqueryDataEditor:\n type: gcp:projects:IAMMember\n name: bigquery_data_editor\n properties:\n project: ${project.projectId}\n role: roles/bigquery.dataEditor\n member: serviceAccount:${bqWriteServiceAccount.email}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_69391\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_69391\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_69391\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_69391\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_69391\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_69391\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Avro\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_8270\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n avroConfig: {\n writeMetadata: true,\n useTopicSchema: true,\n },\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_8270\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n \"avro_config\": {\n \"write_metadata\": True,\n \"use_topic_schema\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_8270\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n AvroConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigAvroConfigArgs\n {\n WriteMetadata = true,\n UseTopicSchema = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_8270\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t\tAvroConfig: \u0026pubsub.SubscriptionCloudStorageConfigAvroConfigArgs{\n\t\t\t\t\tWriteMetadata: pulumi.Bool(true),\n\t\t\t\t\tUseTopicSchema: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigAvroConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_8270\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .avroConfig(SubscriptionCloudStorageConfigAvroConfigArgs.builder()\n .writeMetadata(true)\n .useTopicSchema(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_8270\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n avroConfig:\n writeMetadata: true\n useTopicSchema: true\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst storageWriteServiceAccount = new gcp.serviceaccount.Account(\"storage_write_service_account\", {\n accountId: \"example-stw\",\n displayName: \"Storage Write Service Account\",\n});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: pulumi.interpolate`serviceAccount:${storageWriteServiceAccount.email}`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_41150\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n serviceAccountEmail: storageWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n storageWriteServiceAccount,\n example,\n admin,\n ],\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nstorage_write_service_account = gcp.serviceaccount.Account(\"storage_write_service_account\",\n account_id=\"example-stw\",\n display_name=\"Storage Write Service Account\")\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=storage_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_41150\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"service_account_email\": storage_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n storage_write_service_account,\n example,\n admin,\n ]))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var storageWriteServiceAccount = new Gcp.ServiceAccount.Account(\"storage_write_service_account\", new()\n {\n AccountId = \"example-stw\",\n DisplayName = \"Storage Write Service Account\",\n });\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = storageWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_41150\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n ServiceAccountEmail = storageWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n storageWriteServiceAccount,\n example,\n admin,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstorageWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"storage_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-stw\"),\n\t\t\tDisplayName: pulumi.String(\"Storage Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: storageWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_41150\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tServiceAccountEmail: storageWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tstorageWriteServiceAccount,\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var storageWriteServiceAccount = new Account(\"storageWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-stw\")\n .displayName(\"Storage Write Service Account\")\n .build());\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(storageWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_41150\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .serviceAccountEmail(storageWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n storageWriteServiceAccount,\n example,\n admin)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_41150\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n serviceAccountEmail: ${storageWriteServiceAccount.email}\n options:\n dependsOn:\n - ${storageWriteServiceAccount}\n - ${example}\n - ${admin}\n storageWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: storage_write_service_account\n properties:\n accountId: example-stw\n displayName: Storage Write Service Account\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:${storageWriteServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSubscription can be imported using any of these accepted formats:\n\n* `projects/{{project}}/subscriptions/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Subscription can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default projects/{{project}}/subscriptions/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{name}}\n```\n\n", + "description": "A named resource representing the stream of messages from a single,\nspecific topic, to be delivered to the subscribing application.\n\n\nTo get more information about Subscription, see:\n\n* [API documentation](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions)\n* How-to Guides\n * [Managing Subscriptions](https://cloud.google.com/pubsub/docs/admin#managing_subscriptions)\n\n\u003e **Note:** You can retrieve the email of the Google Managed Pub/Sub Service Account used for forwarding\nby using the `gcp.projects.ServiceIdentity` resource.\n\n## Example Usage\n\n### Pubsub Subscription Push\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n ackDeadlineSeconds: 20,\n labels: {\n foo: \"bar\",\n },\n pushConfig: {\n pushEndpoint: \"https://example.com/push\",\n attributes: {\n \"x-goog-version\": \"v1\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n ack_deadline_seconds=20,\n labels={\n \"foo\": \"bar\",\n },\n push_config={\n \"push_endpoint\": \"https://example.com/push\",\n \"attributes\": {\n \"x-goog-version\": \"v1\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n AckDeadlineSeconds = 20,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs\n {\n PushEndpoint = \"https://example.com/push\",\n Attributes = \n {\n { \"x-goog-version\", \"v1\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPushConfig: \u0026pubsub.SubscriptionPushConfigArgs{\n\t\t\t\tPushEndpoint: pulumi.String(\"https://example.com/push\"),\n\t\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\t\"x-goog-version\": pulumi.String(\"v1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .ackDeadlineSeconds(20)\n .labels(Map.of(\"foo\", \"bar\"))\n .pushConfig(SubscriptionPushConfigArgs.builder()\n .pushEndpoint(\"https://example.com/push\")\n .attributes(Map.of(\"x-goog-version\", \"v1\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n ackDeadlineSeconds: 20\n labels:\n foo: bar\n pushConfig:\n pushEndpoint: https://example.com/push\n attributes:\n x-goog-version: v1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n messageRetentionDuration: \"1200s\",\n retainAckedMessages: true,\n ackDeadlineSeconds: 20,\n expirationPolicy: {\n ttl: \"300000.5s\",\n },\n retryPolicy: {\n minimumBackoff: \"10s\",\n },\n enableMessageOrdering: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n message_retention_duration=\"1200s\",\n retain_acked_messages=True,\n ack_deadline_seconds=20,\n expiration_policy={\n \"ttl\": \"300000.5s\",\n },\n retry_policy={\n \"minimum_backoff\": \"10s\",\n },\n enable_message_ordering=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n MessageRetentionDuration = \"1200s\",\n RetainAckedMessages = true,\n AckDeadlineSeconds = 20,\n ExpirationPolicy = new Gcp.PubSub.Inputs.SubscriptionExpirationPolicyArgs\n {\n Ttl = \"300000.5s\",\n },\n RetryPolicy = new Gcp.PubSub.Inputs.SubscriptionRetryPolicyArgs\n {\n MinimumBackoff = \"10s\",\n },\n EnableMessageOrdering = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMessageRetentionDuration: pulumi.String(\"1200s\"),\n\t\t\tRetainAckedMessages: pulumi.Bool(true),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tExpirationPolicy: \u0026pubsub.SubscriptionExpirationPolicyArgs{\n\t\t\t\tTtl: pulumi.String(\"300000.5s\"),\n\t\t\t},\n\t\t\tRetryPolicy: \u0026pubsub.SubscriptionRetryPolicyArgs{\n\t\t\t\tMinimumBackoff: pulumi.String(\"10s\"),\n\t\t\t},\n\t\t\tEnableMessageOrdering: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionExpirationPolicyArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionRetryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .messageRetentionDuration(\"1200s\")\n .retainAckedMessages(true)\n .ackDeadlineSeconds(20)\n .expirationPolicy(SubscriptionExpirationPolicyArgs.builder()\n .ttl(\"300000.5s\")\n .build())\n .retryPolicy(SubscriptionRetryPolicyArgs.builder()\n .minimumBackoff(\"10s\")\n .build())\n .enableMessageOrdering(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n messageRetentionDuration: 1200s\n retainAckedMessages: true\n ackDeadlineSeconds: 20\n expirationPolicy:\n ttl: 300000.5s\n retryPolicy:\n minimumBackoff: 10s\n enableMessageOrdering: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n filter: ` attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n`,\n ackDeadlineSeconds: 20,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n filter=\"\"\" attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n\"\"\",\n ack_deadline_seconds=20)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Filter = @\" attributes.foo = \"\"foo\"\"\n AND attributes.bar = \"\"bar\"\"\n\",\n AckDeadlineSeconds = 20,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\" attributes.foo = \\\"foo\\\"\\n AND attributes.bar = \\\"bar\\\"\\n\"),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .filter(\"\"\"\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n \"\"\")\n .ackDeadlineSeconds(20)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n filter: |2\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n ackDeadlineSeconds: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Dead Letter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleDeadLetter = new gcp.pubsub.Topic(\"example_dead_letter\", {name: \"example-topic-dead-letter\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n deadLetterPolicy: {\n deadLetterTopic: exampleDeadLetter.id,\n maxDeliveryAttempts: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_dead_letter = gcp.pubsub.Topic(\"example_dead_letter\", name=\"example-topic-dead-letter\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n dead_letter_policy={\n \"dead_letter_topic\": example_dead_letter.id,\n \"max_delivery_attempts\": 10,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleDeadLetter = new Gcp.PubSub.Topic(\"example_dead_letter\", new()\n {\n Name = \"example-topic-dead-letter\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n DeadLetterPolicy = new Gcp.PubSub.Inputs.SubscriptionDeadLetterPolicyArgs\n {\n DeadLetterTopic = exampleDeadLetter.Id,\n MaxDeliveryAttempts = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeadLetter, err := pubsub.NewTopic(ctx, \"example_dead_letter\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic-dead-letter\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tDeadLetterPolicy: \u0026pubsub.SubscriptionDeadLetterPolicyArgs{\n\t\t\t\tDeadLetterTopic: exampleDeadLetter.ID(),\n\t\t\t\tMaxDeliveryAttempts: pulumi.Int(10),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionDeadLetterPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleDeadLetter = new Topic(\"exampleDeadLetter\", TopicArgs.builder()\n .name(\"example-topic-dead-letter\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .deadLetterPolicy(SubscriptionDeadLetterPolicyArgs.builder()\n .deadLetterTopic(exampleDeadLetter.id())\n .maxDeliveryAttempts(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleDeadLetter:\n type: gcp:pubsub:Topic\n name: example_dead_letter\n properties:\n name: example-topic-dead-letter\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n deadLetterPolicy:\n deadLetterTopic: ${exampleDeadLetter.id}\n maxDeliveryAttempts: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Table Schema\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n useTableSchema: true,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"use_table_schema\": True,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n UseTableSchema = true,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tUseTableSchema: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .useTableSchema(true)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n useTableSchema: true\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst bqWriteServiceAccount = new gcp.serviceaccount.Account(\"bq_write_service_account\", {\n accountId: \"example-bqw\",\n displayName: \"BQ Write Service Account\",\n});\nconst project = gcp.organizations.getProject({});\nconst bigqueryMetadataViewer = new gcp.projects.IAMMember(\"bigquery_metadata_viewer\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.metadataViewer\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst bigqueryDataEditor = new gcp.projects.IAMMember(\"bigquery_data_editor\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.dataEditor\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n serviceAccountEmail: bqWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nbq_write_service_account = gcp.serviceaccount.Account(\"bq_write_service_account\",\n account_id=\"example-bqw\",\n display_name=\"BQ Write Service Account\")\nproject = gcp.organizations.get_project()\nbigquery_metadata_viewer = gcp.projects.IAMMember(\"bigquery_metadata_viewer\",\n project=project.project_id,\n role=\"roles/bigquery.metadataViewer\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nbigquery_data_editor = gcp.projects.IAMMember(\"bigquery_data_editor\",\n project=project.project_id,\n role=\"roles/bigquery.dataEditor\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"service_account_email\": bq_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n bq_write_service_account,\n bigquery_metadata_viewer,\n bigquery_data_editor,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var bqWriteServiceAccount = new Gcp.ServiceAccount.Account(\"bq_write_service_account\", new()\n {\n AccountId = \"example-bqw\",\n DisplayName = \"BQ Write Service Account\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var bigqueryMetadataViewer = new Gcp.Projects.IAMMember(\"bigquery_metadata_viewer\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.metadataViewer\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var bigqueryDataEditor = new Gcp.Projects.IAMMember(\"bigquery_data_editor\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.dataEditor\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n ServiceAccountEmail = bqWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"bq_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-bqw\"),\n\t\t\tDisplayName: pulumi.String(\"BQ Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryMetadataViewer, err := projects.NewIAMMember(ctx, \"bigquery_metadata_viewer\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.metadataViewer\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryDataEditor, err := projects.NewIAMMember(ctx, \"bigquery_data_editor\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataEditor\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tServiceAccountEmail: bqWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbqWriteServiceAccount,\n\t\t\tbigqueryMetadataViewer,\n\t\t\tbigqueryDataEditor,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var bqWriteServiceAccount = new Account(\"bqWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-bqw\")\n .displayName(\"BQ Write Service Account\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var bigqueryMetadataViewer = new IAMMember(\"bigqueryMetadataViewer\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.metadataViewer\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var bigqueryDataEditor = new IAMMember(\"bigqueryDataEditor\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.dataEditor\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .deletionProtection(false)\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project.applyValue(getProjectResult -\u003e getProjectResult),datasetId,tableId);\n }))\n .serviceAccountEmail(bqWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n serviceAccountEmail: ${bqWriteServiceAccount.email}\n options:\n dependsOn:\n - ${bqWriteServiceAccount}\n - ${bigqueryMetadataViewer}\n - ${bigqueryDataEditor}\n bqWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: bq_write_service_account\n properties:\n accountId: example-bqw\n displayName: BQ Write Service Account\n bigqueryMetadataViewer:\n type: gcp:projects:IAMMember\n name: bigquery_metadata_viewer\n properties:\n project: ${project.projectId}\n role: roles/bigquery.metadataViewer\n member: serviceAccount:${bqWriteServiceAccount.email}\n bigqueryDataEditor:\n type: gcp:projects:IAMMember\n name: bigquery_data_editor\n properties:\n project: ${project.projectId}\n role: roles/bigquery.dataEditor\n member: serviceAccount:${bqWriteServiceAccount.email}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_8270\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_8270\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_8270\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_8270\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_8270\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_8270\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Avro\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_41150\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n avroConfig: {\n writeMetadata: true,\n useTopicSchema: true,\n },\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_41150\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n \"avro_config\": {\n \"write_metadata\": True,\n \"use_topic_schema\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_41150\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n AvroConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigAvroConfigArgs\n {\n WriteMetadata = true,\n UseTopicSchema = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_41150\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t\tAvroConfig: \u0026pubsub.SubscriptionCloudStorageConfigAvroConfigArgs{\n\t\t\t\t\tWriteMetadata: pulumi.Bool(true),\n\t\t\t\t\tUseTopicSchema: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigAvroConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_41150\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .avroConfig(SubscriptionCloudStorageConfigAvroConfigArgs.builder()\n .writeMetadata(true)\n .useTopicSchema(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_41150\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n avroConfig:\n writeMetadata: true\n useTopicSchema: true\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst storageWriteServiceAccount = new gcp.serviceaccount.Account(\"storage_write_service_account\", {\n accountId: \"example-stw\",\n displayName: \"Storage Write Service Account\",\n});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: pulumi.interpolate`serviceAccount:${storageWriteServiceAccount.email}`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_89313\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n serviceAccountEmail: storageWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n storageWriteServiceAccount,\n example,\n admin,\n ],\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nstorage_write_service_account = gcp.serviceaccount.Account(\"storage_write_service_account\",\n account_id=\"example-stw\",\n display_name=\"Storage Write Service Account\")\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=storage_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_89313\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"service_account_email\": storage_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n storage_write_service_account,\n example,\n admin,\n ]))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var storageWriteServiceAccount = new Gcp.ServiceAccount.Account(\"storage_write_service_account\", new()\n {\n AccountId = \"example-stw\",\n DisplayName = \"Storage Write Service Account\",\n });\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = storageWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_89313\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n ServiceAccountEmail = storageWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n storageWriteServiceAccount,\n example,\n admin,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstorageWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"storage_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-stw\"),\n\t\t\tDisplayName: pulumi.String(\"Storage Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: storageWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_89313\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tServiceAccountEmail: storageWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tstorageWriteServiceAccount,\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var storageWriteServiceAccount = new Account(\"storageWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-stw\")\n .displayName(\"Storage Write Service Account\")\n .build());\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(storageWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_89313\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .serviceAccountEmail(storageWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n storageWriteServiceAccount,\n example,\n admin)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_89313\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n serviceAccountEmail: ${storageWriteServiceAccount.email}\n options:\n dependsOn:\n - ${storageWriteServiceAccount}\n - ${example}\n - ${admin}\n storageWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: storage_write_service_account\n properties:\n accountId: example-stw\n displayName: Storage Write Service Account\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:${storageWriteServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSubscription can be imported using any of these accepted formats:\n\n* `projects/{{project}}/subscriptions/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Subscription can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default projects/{{project}}/subscriptions/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{name}}\n```\n\n", "properties": { "ackDeadlineSeconds": { "type": "integer", @@ -274924,7 +277141,7 @@ } }, "gcp:sql/databaseInstance:DatabaseInstance": { - "description": "Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/docs/mysql/create-instance),\nor the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances).\n\n\u003e **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a\ndefault 'root'@'%' user with no password. This user will be deleted by the provider on\ninstance creation. You should use `gcp.sql.User` to define a custom user with\na restricted host and strong password.\n\n\u003e **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false`\n(and run `pulumi update` to write the field to state) in order to destroy an instance.\nIt is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases.\n\n## Example Usage\n\n### SQL Second Generation Instance\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"main-instance\",\n databaseVersion: \"POSTGRES_15\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"main-instance\",\n database_version=\"POSTGRES_15\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"main-instance\",\n DatabaseVersion = \"POSTGRES_15\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"main-instance\")\n .databaseVersion(\"POSTGRES_15\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: main-instance\n databaseVersion: POSTGRES_15\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Private IP Instance\n\u003e **NOTE:** For private IP instance setup, note that the `gcp.sql.DatabaseInstance` does not actually interpolate values from `gcp.servicenetworking.Connection`. You must explicitly add a `depends_on`reference as shown below.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst privateNetwork = new gcp.compute.Network(\"private_network\", {name: \"private-network\"});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"private_ip_address\", {\n name: \"private-ip-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"private_vpc_connection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n});\nconst dbNameSuffix = new random.RandomId(\"db_name_suffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: pulumi.interpolate`private-instance-${dbNameSuffix.hex}`,\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.selfLink,\n enablePrivatePathForGoogleCloudServices: true,\n },\n },\n}, {\n dependsOn: [privateVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nprivate_network = gcp.compute.Network(\"private_network\", name=\"private-network\")\nprivate_ip_address = gcp.compute.GlobalAddress(\"private_ip_address\",\n name=\"private-ip-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id)\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"private_vpc_connection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name])\ndb_name_suffix = random.RandomId(\"db_name_suffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=db_name_suffix.hex.apply(lambda hex: f\"private-instance-{hex}\"),\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"ipv4_enabled\": False,\n \"private_network\": private_network.self_link,\n \"enable_private_path_for_google_cloud_services\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"private_network\", new()\n {\n Name = \"private-network\",\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"private_ip_address\", new()\n {\n Name = \"private-ip-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"private_vpc_connection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n });\n\n var dbNameSuffix = new Random.RandomId(\"db_name_suffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = dbNameSuffix.Hex.Apply(hex =\u003e $\"private-instance-{hex}\"),\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n Ipv4Enabled = false,\n PrivateNetwork = privateNetwork.SelfLink,\n EnablePrivatePathForGoogleCloudServices = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprivateNetwork, err := compute.NewNetwork(ctx, \"private_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"private-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"private_ip_address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"private_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdbNameSuffix, err := random.NewRandomId(ctx, \"db_name_suffix\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: dbNameSuffix.Hex.ApplyT(func(hex string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"private-instance-%v\", hex), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t\tPrivateNetwork: privateNetwork.SelfLink,\n\t\t\t\t\tEnablePrivatePathForGoogleCloudServices: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\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 privateNetwork = new Network(\"privateNetwork\", NetworkArgs.builder()\n .name(\"private-network\")\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder()\n .name(\"private-ip-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build());\n\n var privateVpcConnection = new Connection(\"privateVpcConnection\", ConnectionArgs.builder()\n .network(privateNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAddress.name())\n .build());\n\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder()\n .byteLength(4)\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(dbNameSuffix.hex().applyValue(hex -\u003e String.format(\"private-instance-%s\", hex)))\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .ipv4Enabled(false)\n .privateNetwork(privateNetwork.selfLink())\n .enablePrivatePathForGoogleCloudServices(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n name: private_network\n properties:\n name: private-network\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n name: private_ip_address\n properties:\n name: private-ip-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n name: private_vpc_connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n dbNameSuffix:\n type: random:RandomId\n name: db_name_suffix\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: private-instance-${dbNameSuffix.hex}\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.selfLink}\n enablePrivatePathForGoogleCloudServices: true\n options:\n dependsOn:\n - ${privateVpcConnection}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ENTERPRISE_PLUS Instance with data_cache_config\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"enterprise-plus-main-instance\",\n databaseVersion: \"MYSQL_8_0_31\",\n settings: {\n tier: \"db-perf-optimized-N-2\",\n edition: \"ENTERPRISE_PLUS\",\n dataCacheConfig: {\n dataCacheEnabled: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"enterprise-plus-main-instance\",\n database_version=\"MYSQL_8_0_31\",\n settings={\n \"tier\": \"db-perf-optimized-N-2\",\n \"edition\": \"ENTERPRISE_PLUS\",\n \"data_cache_config\": {\n \"data_cache_enabled\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"enterprise-plus-main-instance\",\n DatabaseVersion = \"MYSQL_8_0_31\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-perf-optimized-N-2\",\n Edition = \"ENTERPRISE_PLUS\",\n DataCacheConfig = new Gcp.Sql.Inputs.DatabaseInstanceSettingsDataCacheConfigArgs\n {\n DataCacheEnabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"enterprise-plus-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0_31\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-perf-optimized-N-2\"),\n\t\t\t\tEdition: pulumi.String(\"ENTERPRISE_PLUS\"),\n\t\t\t\tDataCacheConfig: \u0026sql.DatabaseInstanceSettingsDataCacheConfigArgs{\n\t\t\t\t\tDataCacheEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsDataCacheConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"enterprise-plus-main-instance\")\n .databaseVersion(\"MYSQL_8_0_31\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-perf-optimized-N-2\")\n .edition(\"ENTERPRISE_PLUS\")\n .dataCacheConfig(DatabaseInstanceSettingsDataCacheConfigArgs.builder()\n .dataCacheEnabled(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: enterprise-plus-main-instance\n databaseVersion: MYSQL_8_0_31\n settings:\n tier: db-perf-optimized-N-2\n edition: ENTERPRISE_PLUS\n dataCacheConfig:\n dataCacheEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC connectivity\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\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\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC auto connections\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n pscAutoConnections: [{\n consumerNetwork: \"network-name\",\n consumerServiceProjectId: \"project-id\",\n }],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n \"psc_auto_connections\": [{\n \"consumer_network\": \"network-name\",\n \"consumer_service_project_id\": \"project-id\",\n }],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n PscAutoConnections = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs\n {\n ConsumerNetwork = \"network-name\",\n ConsumerServiceProjectId = \"project-id\",\n },\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tPscAutoConnections: sql.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArray{\n\t\t\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs{\n\t\t\t\t\t\t\t\t\tConsumerNetwork: pulumi.String(\"network-name\"),\n\t\t\t\t\t\t\t\t\tConsumerServiceProjectId: pulumi.String(\"project-id\"),\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\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .pscAutoConnections(DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs.builder()\n .consumerNetwork(\"network-name\")\n .consumerServiceProjectId(\"project-id\")\n .build())\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n pscAutoConnections:\n - consumerNetwork: network-name\n consumerServiceProjectId: project-id\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Switchover (SQL Server Only)\n\nUsers can perform a switchover on any direct `cascadable` replica by following the steps below.\n\n ~\u003e**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below.\n\nFor a more in-depth walkthrough with example code, see the Switchover Guide\n\n### Steps to Invoke Switchover\n\nCreate a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`)\n\n#### Invoking switchover in the replica resource:\n1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE`\n2. Remove `master_instance_name`\n3. Remove `replica_configuration`\n4. Add current primary's name to the replica's `replica_names` list\n\n#### Updating the primary resource:\n1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE`\n2. Set `master_instance_name` to the original replica (which will be primary after switchover)\n3. Set `replica_configuration` and set `cascadable_replica` to `true`\n4. Remove original replica from `replica_names`\n\n \u003e **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas.\n\n#### Plan and verify that:\n- `pulumi preview` outputs **\"0 to add, 0 to destroy\"**\n- `pulumi preview` does not say **\"must be replaced\"** for any resource\n- Every resource **\"will be updated in-place\"**\n- Only the 2 instances involved in switchover have planned changes\n- (Recommended) Use `deletion_protection` on instances as a safety measure\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Database instances can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{name}}\n```\n\nconfig and set on the server.\n\nWhen importing, double-check that your config has all the fields set that you expect- just seeing\n\nno diff isn't sufficient to know that your config could reproduce the imported resource.\n\n", + "description": "Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/docs/mysql/create-instance),\nor the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances).\n\n\u003e **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a\ndefault 'root'@'%' user with no password. This user will be deleted by the provider on\ninstance creation. You should use `gcp.sql.User` to define a custom user with\na restricted host and strong password.\n\n\u003e **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false`\n(and run `pulumi update` to write the field to state) in order to destroy an instance.\nIt is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases.\n\n## Example Usage\n\n### SQL Second Generation Instance\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"main-instance\",\n databaseVersion: \"POSTGRES_15\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"main-instance\",\n database_version=\"POSTGRES_15\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"main-instance\",\n DatabaseVersion = \"POSTGRES_15\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"main-instance\")\n .databaseVersion(\"POSTGRES_15\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: main-instance\n databaseVersion: POSTGRES_15\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Private IP Instance\n\u003e **NOTE:** For private IP instance setup, note that the `gcp.sql.DatabaseInstance` does not actually interpolate values from `gcp.servicenetworking.Connection`. You must explicitly add a `depends_on`reference as shown below.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst privateNetwork = new gcp.compute.Network(\"private_network\", {name: \"private-network\"});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"private_ip_address\", {\n name: \"private-ip-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"private_vpc_connection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n});\nconst dbNameSuffix = new random.RandomId(\"db_name_suffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: pulumi.interpolate`private-instance-${dbNameSuffix.hex}`,\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.selfLink,\n enablePrivatePathForGoogleCloudServices: true,\n },\n },\n}, {\n dependsOn: [privateVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nprivate_network = gcp.compute.Network(\"private_network\", name=\"private-network\")\nprivate_ip_address = gcp.compute.GlobalAddress(\"private_ip_address\",\n name=\"private-ip-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id)\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"private_vpc_connection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name])\ndb_name_suffix = random.RandomId(\"db_name_suffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=db_name_suffix.hex.apply(lambda hex: f\"private-instance-{hex}\"),\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"ipv4_enabled\": False,\n \"private_network\": private_network.self_link,\n \"enable_private_path_for_google_cloud_services\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"private_network\", new()\n {\n Name = \"private-network\",\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"private_ip_address\", new()\n {\n Name = \"private-ip-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"private_vpc_connection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n });\n\n var dbNameSuffix = new Random.RandomId(\"db_name_suffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = dbNameSuffix.Hex.Apply(hex =\u003e $\"private-instance-{hex}\"),\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n Ipv4Enabled = false,\n PrivateNetwork = privateNetwork.SelfLink,\n EnablePrivatePathForGoogleCloudServices = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprivateNetwork, err := compute.NewNetwork(ctx, \"private_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"private-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"private_ip_address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"private_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdbNameSuffix, err := random.NewRandomId(ctx, \"db_name_suffix\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: dbNameSuffix.Hex.ApplyT(func(hex string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"private-instance-%v\", hex), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t\tPrivateNetwork: privateNetwork.SelfLink,\n\t\t\t\t\tEnablePrivatePathForGoogleCloudServices: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\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 privateNetwork = new Network(\"privateNetwork\", NetworkArgs.builder()\n .name(\"private-network\")\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder()\n .name(\"private-ip-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build());\n\n var privateVpcConnection = new Connection(\"privateVpcConnection\", ConnectionArgs.builder()\n .network(privateNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAddress.name())\n .build());\n\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder()\n .byteLength(4)\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(dbNameSuffix.hex().applyValue(hex -\u003e String.format(\"private-instance-%s\", hex)))\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .ipv4Enabled(false)\n .privateNetwork(privateNetwork.selfLink())\n .enablePrivatePathForGoogleCloudServices(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n name: private_network\n properties:\n name: private-network\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n name: private_ip_address\n properties:\n name: private-ip-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n name: private_vpc_connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n dbNameSuffix:\n type: random:RandomId\n name: db_name_suffix\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: private-instance-${dbNameSuffix.hex}\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.selfLink}\n enablePrivatePathForGoogleCloudServices: true\n options:\n dependsOn:\n - ${privateVpcConnection}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ENTERPRISE_PLUS Instance with data_cache_config\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"enterprise-plus-main-instance\",\n databaseVersion: \"MYSQL_8_0_31\",\n settings: {\n tier: \"db-perf-optimized-N-2\",\n edition: \"ENTERPRISE_PLUS\",\n dataCacheConfig: {\n dataCacheEnabled: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"enterprise-plus-main-instance\",\n database_version=\"MYSQL_8_0_31\",\n settings={\n \"tier\": \"db-perf-optimized-N-2\",\n \"edition\": \"ENTERPRISE_PLUS\",\n \"data_cache_config\": {\n \"data_cache_enabled\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"enterprise-plus-main-instance\",\n DatabaseVersion = \"MYSQL_8_0_31\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-perf-optimized-N-2\",\n Edition = \"ENTERPRISE_PLUS\",\n DataCacheConfig = new Gcp.Sql.Inputs.DatabaseInstanceSettingsDataCacheConfigArgs\n {\n DataCacheEnabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"enterprise-plus-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0_31\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-perf-optimized-N-2\"),\n\t\t\t\tEdition: pulumi.String(\"ENTERPRISE_PLUS\"),\n\t\t\t\tDataCacheConfig: \u0026sql.DatabaseInstanceSettingsDataCacheConfigArgs{\n\t\t\t\t\tDataCacheEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsDataCacheConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"enterprise-plus-main-instance\")\n .databaseVersion(\"MYSQL_8_0_31\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-perf-optimized-N-2\")\n .edition(\"ENTERPRISE_PLUS\")\n .dataCacheConfig(DatabaseInstanceSettingsDataCacheConfigArgs.builder()\n .dataCacheEnabled(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: enterprise-plus-main-instance\n databaseVersion: MYSQL_8_0_31\n settings:\n tier: db-perf-optimized-N-2\n edition: ENTERPRISE_PLUS\n dataCacheConfig:\n dataCacheEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC connectivity\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\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\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC auto connections\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n pscAutoConnections: [{\n consumerNetwork: \"network-name\",\n consumerServiceProjectId: \"project-id\",\n }],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n \"psc_auto_connections\": [{\n \"consumer_network\": \"network-name\",\n \"consumer_service_project_id\": \"project-id\",\n }],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n PscAutoConnections = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs\n {\n ConsumerNetwork = \"network-name\",\n ConsumerServiceProjectId = \"project-id\",\n },\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tPscAutoConnections: sql.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArray{\n\t\t\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs{\n\t\t\t\t\t\t\t\t\tConsumerNetwork: pulumi.String(\"network-name\"),\n\t\t\t\t\t\t\t\t\tConsumerServiceProjectId: pulumi.String(\"project-id\"),\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\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .pscAutoConnections(DatabaseInstanceSettingsIpConfigurationPscConfigPscAutoConnectionArgs.builder()\n .consumerNetwork(\"network-name\")\n .consumerServiceProjectId(\"project-id\")\n .build())\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n pscAutoConnections:\n - consumerNetwork: network-name\n consumerServiceProjectId: project-id\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Switchover\n\nUsers can perform a switchover on a replica by following the steps below.\n\n ~\u003e**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below.\n\nFor a more in-depth walkthrough with example code, see the Switchover Guide\n\n### Steps to Invoke Switchover\n\nMySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica.\n\nSQL Server: Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`)\n\n#### Invoking switchover in the replica resource:\n1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE`\n2. Remove `master_instance_name`\n3. (SQL Server) Remove `replica_configuration`\n4. Add current primary's name to the replica's `replica_names` list\n5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`.\n6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details.\n\n#### Updating the primary resource:\n1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE`\n2. Set `master_instance_name` to the original replica (which will be primary after switchover)\n3. (SQL Server) Set `replica_configuration` and set `cascadable_replica` to `true`\n4. Remove original replica from `replica_names`\n * **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas.\n5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string.\n6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details.\n#### Plan and verify that:\n- `pulumi preview` outputs **\"0 to add, 0 to destroy\"**\n- `pulumi preview` does not say **\"must be replaced\"** for any resource\n- Every resource **\"will be updated in-place\"**\n- Only the 2 instances involved in switchover have planned changes\n- (Recommended) Use `deletion_protection` on instances as a safety measure\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Database instances can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{name}}\n```\n\nconfig and set on the server.\n\nWhen importing, double-check that your config has all the fields set that you expect- just seeing\n\nno diff isn't sufficient to know that your config could reproduce the imported resource.\n\n", "properties": { "availableMaintenanceVersions": { "type": "array", @@ -275015,6 +277232,10 @@ }, "description": "List of replica names. Can be updated.\n" }, + "replicationCluster": { + "$ref": "#/types/gcp:sql/DatabaseInstanceReplicationCluster:DatabaseInstanceReplicationCluster", + "description": "A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only\nafter both the primary and replica are created.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -275063,6 +277284,7 @@ "region", "replicaConfiguration", "replicaNames", + "replicationCluster", "selfLink", "serverCaCerts", "serviceAccountEmailAddress", @@ -275125,6 +277347,10 @@ }, "description": "List of replica names. Can be updated.\n" }, + "replicationCluster": { + "$ref": "#/types/gcp:sql/DatabaseInstanceReplicationCluster:DatabaseInstanceReplicationCluster", + "description": "A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only\nafter both the primary and replica are created.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -275238,6 +277464,10 @@ }, "description": "List of replica names. Can be updated.\n" }, + "replicationCluster": { + "$ref": "#/types/gcp:sql/DatabaseInstanceReplicationCluster:DatabaseInstanceReplicationCluster", + "description": "A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only\nafter both the primary and replica are created.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -275287,7 +277517,7 @@ }, "databaseVersion": { "type": "string", - "description": "The MySQL version running on your source database server.\nPossible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`.\n" + "description": "The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions.\n" }, "dumpFilePath": { "type": "string", @@ -275348,7 +277578,7 @@ }, "databaseVersion": { "type": "string", - "description": "The MySQL version running on your source database server.\nPossible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`.\n", + "description": "The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions.\n", "willReplaceOnChanges": true }, "dumpFilePath": { @@ -275417,7 +277647,7 @@ }, "databaseVersion": { "type": "string", - "description": "The MySQL version running on your source database server.\nPossible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`.\n", + "description": "The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions.\n", "willReplaceOnChanges": true }, "dumpFilePath": { @@ -280439,7 +282669,7 @@ } }, "gcp:vertex/aiEndpoint:AiEndpoint": { - "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"some_dataset\",\n friendlyName: \"logging dataset\",\n description: \"This is a dataset that requests are logged to\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n predictRequestResponseLoggingConfig: {\n bigqueryDestination: {\n outputUri: pulumi.all([project, bqDataset.datasetId]).apply(([project, datasetId]) =\u003e `bq://${project.projectId}.${datasetId}.request_response_logging`),\n },\n enabled: true,\n samplingRate: 0.1,\n },\n trafficSplit: JSON.stringify({\n \"12345\": 100,\n }),\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\n dataset_id=\"some_dataset\",\n friendly_name=\"logging dataset\",\n description=\"This is a dataset that requests are logged to\",\n location=\"US\",\n delete_contents_on_destroy=True)\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n predict_request_response_logging_config={\n \"bigquery_destination\": {\n \"output_uri\": bq_dataset.dataset_id.apply(lambda dataset_id: f\"bq://{project.project_id}.{dataset_id}.request_response_logging\"),\n },\n \"enabled\": True,\n \"sampling_rate\": 0.1,\n },\n traffic_split=json.dumps({\n \"12345\": 100,\n }),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"some_dataset\",\n FriendlyName = \"logging dataset\",\n Description = \"This is a dataset that requests are logged to\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n PredictRequestResponseLoggingConfig = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigArgs\n {\n BigqueryDestination = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs\n {\n OutputUri = Output.Tuple(project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}.{datasetId}.request_response_logging\";\n }),\n },\n Enabled = true,\n SamplingRate = 0.1,\n },\n TrafficSplit = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"12345\"] = 100,\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bq_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"some_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"logging dataset\"),\n\t\t\tDescription: pulumi.String(\"This is a dataset that requests are logged to\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"12345\": 100,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t\tPredictRequestResponseLoggingConfig: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigArgs{\n\t\t\t\tBigqueryDestination: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs{\n\t\t\t\t\tOutputUri: bqDataset.DatasetId.ApplyT(func(datasetId string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.request_response_logging\", project.ProjectId, datasetId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSamplingRate: pulumi.Float64(0.1),\n\t\t\t},\n\t\t\tTrafficSplit: pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder()\n .datasetId(\"some_dataset\")\n .friendlyName(\"logging dataset\")\n .description(\"This is a dataset that requests are logged to\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .predictRequestResponseLoggingConfig(AiEndpointPredictRequestResponseLoggingConfigArgs.builder()\n .bigqueryDestination(AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs.builder()\n .outputUri(bqDataset.datasetId().applyValue(datasetId -\u003e String.format(\"bq://%s.%s.request_response_logging\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId()),datasetId)))\n .build())\n .enabled(true)\n .samplingRate(0.1)\n .build())\n .trafficSplit(serializeJson(\n jsonObject(\n jsonProperty(\"12345\", 100)\n )))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n predictRequestResponseLoggingConfig:\n bigqueryDestination:\n outputUri: bq://${project.projectId}.${bqDataset.datasetId}.request_response_logging\n enabled: true\n samplingRate: 0.1\n trafficSplit:\n fn::toJSON:\n '12345': 100\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_dataset\n properties:\n datasetId: some_dataset\n friendlyName: logging dataset\n description: This is a dataset that requests are logged to\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Private Service Connect\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_89313\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.projectId)],\n enableSecurePrivateServiceConnect: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_89313\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.project_id],\n \"enable_secure_private_service_connect\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_89313\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n EnableSecurePrivateServiceConnect = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_89313\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t\tEnableSecurePrivateServiceConnect: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_89313\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .enableSecurePrivateServiceConnect(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_89313\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.projectId}\n enableSecurePrivateServiceConnect: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Dedicated Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_60646\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n dedicatedEndpointEnabled: true,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_60646\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n dedicated_endpoint_enabled=True)\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_60646\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DedicatedEndpointEnabled = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_60646\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDedicatedEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_60646\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .dedicatedEndpointEnabled(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_60646\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n dedicatedEndpointEnabled: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n", + "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"some_dataset\",\n friendlyName: \"logging dataset\",\n description: \"This is a dataset that requests are logged to\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n predictRequestResponseLoggingConfig: {\n bigqueryDestination: {\n outputUri: pulumi.all([project, bqDataset.datasetId]).apply(([project, datasetId]) =\u003e `bq://${project.projectId}.${datasetId}.request_response_logging`),\n },\n enabled: true,\n samplingRate: 0.1,\n },\n trafficSplit: JSON.stringify({\n \"12345\": 100,\n }),\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\n dataset_id=\"some_dataset\",\n friendly_name=\"logging dataset\",\n description=\"This is a dataset that requests are logged to\",\n location=\"US\",\n delete_contents_on_destroy=True)\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n predict_request_response_logging_config={\n \"bigquery_destination\": {\n \"output_uri\": bq_dataset.dataset_id.apply(lambda dataset_id: f\"bq://{project.project_id}.{dataset_id}.request_response_logging\"),\n },\n \"enabled\": True,\n \"sampling_rate\": 0.1,\n },\n traffic_split=json.dumps({\n \"12345\": 100,\n }),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"some_dataset\",\n FriendlyName = \"logging dataset\",\n Description = \"This is a dataset that requests are logged to\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n PredictRequestResponseLoggingConfig = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigArgs\n {\n BigqueryDestination = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs\n {\n OutputUri = Output.Tuple(project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}.{datasetId}.request_response_logging\";\n }),\n },\n Enabled = true,\n SamplingRate = 0.1,\n },\n TrafficSplit = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"12345\"] = 100,\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bq_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"some_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"logging dataset\"),\n\t\t\tDescription: pulumi.String(\"This is a dataset that requests are logged to\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"12345\": 100,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t\tPredictRequestResponseLoggingConfig: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigArgs{\n\t\t\t\tBigqueryDestination: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs{\n\t\t\t\t\tOutputUri: bqDataset.DatasetId.ApplyT(func(datasetId string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.request_response_logging\", project.ProjectId, datasetId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSamplingRate: pulumi.Float64(0.1),\n\t\t\t},\n\t\t\tTrafficSplit: pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder()\n .datasetId(\"some_dataset\")\n .friendlyName(\"logging dataset\")\n .description(\"This is a dataset that requests are logged to\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .predictRequestResponseLoggingConfig(AiEndpointPredictRequestResponseLoggingConfigArgs.builder()\n .bigqueryDestination(AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs.builder()\n .outputUri(bqDataset.datasetId().applyValue(datasetId -\u003e String.format(\"bq://%s.%s.request_response_logging\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId()),datasetId)))\n .build())\n .enabled(true)\n .samplingRate(0.1)\n .build())\n .trafficSplit(serializeJson(\n jsonObject(\n jsonProperty(\"12345\", 100)\n )))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n predictRequestResponseLoggingConfig:\n bigqueryDestination:\n outputUri: bq://${project.projectId}.${bqDataset.datasetId}.request_response_logging\n enabled: true\n samplingRate: 0.1\n trafficSplit:\n fn::toJSON:\n '12345': 100\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_dataset\n properties:\n datasetId: some_dataset\n friendlyName: logging dataset\n description: This is a dataset that requests are logged to\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Private Service Connect\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_60646\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.projectId)],\n enableSecurePrivateServiceConnect: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_60646\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.project_id],\n \"enable_secure_private_service_connect\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_60646\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n EnableSecurePrivateServiceConnect = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_60646\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t\tEnableSecurePrivateServiceConnect: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_60646\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .enableSecurePrivateServiceConnect(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_60646\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.projectId}\n enableSecurePrivateServiceConnect: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Dedicated Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_9394\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n dedicatedEndpointEnabled: true,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_9394\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n dedicated_endpoint_enabled=True)\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_9394\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DedicatedEndpointEnabled = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_9394\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDedicatedEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_9394\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .dedicatedEndpointEnabled(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_9394\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n dedicatedEndpointEnabled: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -281562,7 +283792,7 @@ } }, "gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview": { - "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_9394\",\n name: \"tf-test_11380\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_9394\",\n name=\"tf-test_11380\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_9394\",\n Name = \"tf-test_11380\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_9394\"),\n\t\t\tName: pulumi.String(\"tf-test_11380\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_9394\")\n .name(\"tf-test_11380\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_9394\n name: tf-test_11380\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependsOn:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependsOn:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependsOn:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependsOn:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependsOn:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependsOn:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n", + "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_11380\",\n name: \"tf-test_35305\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_11380\",\n name=\"tf-test_35305\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_11380\",\n Name = \"tf-test_35305\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_11380\"),\n\t\t\tName: pulumi.String(\"tf-test_35305\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_11380\")\n .name(\"tf-test_35305\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_11380\n name: tf-test_35305\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependsOn:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependsOn:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependsOn:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependsOn:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependsOn:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependsOn:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n", "properties": { "bigQuerySource": { "$ref": "#/types/gcp:vertex/AiFeatureOnlineStoreFeatureviewBigQuerySource:AiFeatureOnlineStoreFeatureviewBigQuerySource", @@ -307606,6 +309836,101 @@ "type": "object" } }, + "gcp:parametermanager/getRegionalParameter:getRegionalParameter": { + "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst regParameterDatasource = gcp.parametermanager.getRegionalParameter({\n parameterId: \"foobar\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nreg_parameter_datasource = gcp.parametermanager.get_regional_parameter(parameter_id=\"foobar\",\n 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 regParameterDatasource = Gcp.ParameterManager.GetRegionalParameter.Invoke(new()\n {\n ParameterId = \"foobar\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := parametermanager.LookupRegionalParameter(ctx, \u0026parametermanager.LookupRegionalParameterArgs{\n\t\t\tParameterId: \"foobar\",\n\t\t\tLocation: \"us-central1\",\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.parametermanager.ParametermanagerFunctions;\nimport com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()\n .parameterId(\"foobar\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n regParameterDatasource:\n fn::invoke:\n function: gcp:parametermanager:getRegionalParameter\n arguments:\n parameterId: foobar\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getRegionalParameter.\n", + "properties": { + "location": { + "type": "string", + "description": "The location of the regional parameter. eg us-central1\n" + }, + "parameterId": { + "type": "string", + "description": "The name of the regional parameter.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\n" + } + }, + "type": "object", + "required": [ + "location", + "parameterId" + ] + }, + "outputs": { + "description": "A collection of values returned by getRegionalParameter.\n", + "properties": { + "createTime": { + "type": "string" + }, + "effectiveLabels": { + "additionalProperties": { + "type": "string" + }, + "secret": true, + "type": "object" + }, + "format": { + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "parameterId": { + "type": "string" + }, + "policyMembers": { + "items": { + "$ref": "#/types/gcp:parametermanager/getRegionalParameterPolicyMember:getRegionalParameterPolicyMember" + }, + "type": "array" + }, + "project": { + "type": "string" + }, + "pulumiLabels": { + "additionalProperties": { + "type": "string" + }, + "secret": true, + "type": "object" + }, + "updateTime": { + "type": "string" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "format", + "labels", + "location", + "name", + "parameterId", + "policyMembers", + "pulumiLabels", + "updateTime", + "id" + ], + "type": "object" + } + }, "gcp:privilegedaccessmanager/getEntitlement:getEntitlement": { "description": "Use this data source to get information about a Google Cloud Privileged Access Manager Entitlement.\n\nTo get more information about Privileged Access Manager, see:\n\n* [API Documentation](https://cloud.google.com/iam/docs/reference/pam/rest)\n* How-to guides\n * [Official documentation](https://cloud.google.com/iam/docs/pam-overview)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my-entitlement = gcp.privilegedaccessmanager.getEntitlement({\n parent: \"projects/my-project\",\n location: \"global\",\n entitlementId: \"my-entitlement\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_entitlement = gcp.privilegedaccessmanager.get_entitlement(parent=\"projects/my-project\",\n location=\"global\",\n entitlement_id=\"my-entitlement\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_entitlement = Gcp.PrivilegedAccessManager.GetEntitlement.Invoke(new()\n {\n Parent = \"projects/my-project\",\n Location = \"global\",\n EntitlementId = \"my-entitlement\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/privilegedaccessmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := privilegedaccessmanager.LookupEntitlement(ctx, \u0026privilegedaccessmanager.LookupEntitlementArgs{\n\t\t\tParent: pulumi.StringRef(\"projects/my-project\"),\n\t\t\tLocation: pulumi.StringRef(\"global\"),\n\t\t\tEntitlementId: pulumi.StringRef(\"my-entitlement\"),\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.privilegedaccessmanager.PrivilegedaccessmanagerFunctions;\nimport com.pulumi.gcp.privilegedaccessmanager.inputs.GetEntitlementArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var my-entitlement = PrivilegedaccessmanagerFunctions.getEntitlement(GetEntitlementArgs.builder()\n .parent(\"projects/my-project\")\n .location(\"global\")\n .entitlementId(\"my-entitlement\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n my-entitlement:\n fn::invoke:\n function: gcp:privilegedaccessmanager:getEntitlement\n arguments:\n parent: projects/my-project\n location: global\n entitlementId: my-entitlement\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { @@ -311029,6 +313354,12 @@ }, "type": "array" }, + "replicationClusters": { + "items": { + "$ref": "#/types/gcp:sql/getDatabaseInstanceReplicationCluster:getDatabaseInstanceReplicationCluster" + }, + "type": "array" + }, "restoreBackupContexts": { "items": { "$ref": "#/types/gcp:sql/getDatabaseInstanceRestoreBackupContext:getDatabaseInstanceRestoreBackupContext" @@ -311077,6 +313408,7 @@ "region", "replicaConfigurations", "replicaNames", + "replicationClusters", "restoreBackupContexts", "rootPassword", "selfLink", diff --git a/provider/resources.go b/provider/resources.go index 53160c8616..3b7ae62f04 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -206,6 +206,7 @@ var moduleMapping = map[string]string{ "cloudfunctions": gcpCloudFunctions, "cloudfunctions2": gcpCloudFunctionsV2, "cloudiot": gcpIot, + "colab": "Colab", "composer": gcpComposer, "compute": gcpCompute, "container": gcpKubernetes, @@ -268,6 +269,7 @@ var moduleMapping = map[string]string{ "os_config": gcpOsConfig, "os_login": gcpOsLogin, "parallelstore": gcpParallelStore, + "parameter_manager": "ParameterManager", "privateca": gcpCertificateAuthority, "privileged_access_manager": gcpPrivilegedAccessManager, "project": gcpProject, diff --git a/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs b/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs index 1663664f5c..e5f52f5521 100644 --- a/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs +++ b/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs @@ -140,6 +140,12 @@ public partial class AccessLevelCondition : global::Pulumi.CustomResource [Output("accessLevel")] public Output AccessLevel { get; private set; } = null!; + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// Device specific restrictions, all restrictions must hold for /// the Condition to be true. If not specified, all devices are @@ -380,6 +386,12 @@ public sealed class AccessLevelConditionState : global::Pulumi.ResourceArgs [Input("accessLevel")] public Input? AccessLevel { get; set; } + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// Device specific restrictions, all restrictions must hold for /// the Condition to be true. If not specified, all devices are diff --git a/sdk/dotnet/AccessContextManager/EgressPolicy.cs b/sdk/dotnet/AccessContextManager/EgressPolicy.cs index f437443a6c..888750daf8 100644 --- a/sdk/dotnet/AccessContextManager/EgressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/EgressPolicy.cs @@ -31,6 +31,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/egressPolicy:EgressPolicy")] public partial class EgressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// The name of the Service Perimeter to add this resource to. /// @@ -115,6 +121,12 @@ public EgressPolicyArgs() public sealed class EgressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// The name of the Service Perimeter to add this resource to. /// diff --git a/sdk/dotnet/AccessContextManager/IngressPolicy.cs b/sdk/dotnet/AccessContextManager/IngressPolicy.cs index 8064e5cee3..01efc4ed16 100644 --- a/sdk/dotnet/AccessContextManager/IngressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/IngressPolicy.cs @@ -31,6 +31,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/ingressPolicy:IngressPolicy")] public partial class IngressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// The name of the Service Perimeter to add this resource to. /// @@ -115,6 +121,12 @@ public IngressPolicyArgs() public sealed class IngressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// The name of the Service Perimeter to add this resource to. /// diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs index a71ef8b017..7fdc099c2e 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs @@ -37,6 +37,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy")] public partial class ServicePerimeterDryRunEgressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// Defines conditions on the source of a request causing this `EgressPolicy` to apply. /// Structure is documented below. @@ -139,6 +145,12 @@ public ServicePerimeterDryRunEgressPolicyArgs() public sealed class ServicePerimeterDryRunEgressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// Defines conditions on the source of a request causing this `EgressPolicy` to apply. /// Structure is documented below. diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs index a57bc7196e..7d8e18e7da 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs @@ -38,6 +38,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy")] public partial class ServicePerimeterDryRunIngressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// Defines the conditions on the source of a request causing this `IngressPolicy` /// to apply. @@ -142,6 +148,12 @@ public ServicePerimeterDryRunIngressPolicyArgs() public sealed class ServicePerimeterDryRunIngressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// Defines the conditions on the source of a request causing this `IngressPolicy` /// to apply. diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunResource.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunResource.cs index eb2c629d6e..c0975c8062 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunResource.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunResource.cs @@ -89,6 +89,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource")] public partial class ServicePerimeterDryRunResource : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// The name of the Service Perimeter to add this resource to. /// @@ -177,6 +183,12 @@ public ServicePerimeterDryRunResourceArgs() public sealed class ServicePerimeterDryRunResourceState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// The name of the Service Perimeter to add this resource to. /// diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs index a6937f3579..4cdcbd1ffd 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs @@ -37,6 +37,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy")] public partial class ServicePerimeterEgressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// Defines conditions on the source of a request causing this `EgressPolicy` to apply. /// Structure is documented below. @@ -139,6 +145,12 @@ public ServicePerimeterEgressPolicyArgs() public sealed class ServicePerimeterEgressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// Defines conditions on the source of a request causing this `EgressPolicy` to apply. /// Structure is documented below. diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs index 5d3ca2ccff..11259e6b73 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs @@ -38,6 +38,12 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy")] public partial class ServicePerimeterIngressPolicy : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + /// /// Defines the conditions on the source of a request causing this `IngressPolicy` /// to apply. @@ -142,6 +148,12 @@ public ServicePerimeterIngressPolicyArgs() public sealed class ServicePerimeterIngressPolicyState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + /// /// Defines the conditions on the source of a request causing this `IngressPolicy` /// to apply. diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterResource.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterResource.cs index 49ba089ae1..e63c74d5ca 100644 --- a/sdk/dotnet/AccessContextManager/ServicePerimeterResource.cs +++ b/sdk/dotnet/AccessContextManager/ServicePerimeterResource.cs @@ -88,6 +88,18 @@ namespace Pulumi.Gcp.AccessContextManager [GcpResourceType("gcp:accesscontextmanager/servicePerimeterResource:ServicePerimeterResource")] public partial class ServicePerimeterResource : global::Pulumi.CustomResource { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Output("accessPolicyId")] + public Output AccessPolicyId { get; private set; } = null!; + + /// + /// The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + /// /// The name of the Service Perimeter to add this resource to. /// @@ -176,6 +188,18 @@ public ServicePerimeterResourceArgs() public sealed class ServicePerimeterResourceState : global::Pulumi.ResourceArgs { + /// + /// The name of the Access Policy this resource belongs to. + /// + [Input("accessPolicyId")] + public Input? AccessPolicyId { get; set; } + + /// + /// The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + /// + [Input("etag")] + public Input? Etag { get; set; } + /// /// The name of the Service Perimeter to add this resource to. /// diff --git a/sdk/dotnet/Apigee/EnvironmentAddonsConfig.cs b/sdk/dotnet/Apigee/EnvironmentAddonsConfig.cs new file mode 100644 index 0000000000..355434db8d --- /dev/null +++ b/sdk/dotnet/Apigee/EnvironmentAddonsConfig.cs @@ -0,0 +1,145 @@ +// *** 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.Apigee +{ + /// + /// Enable/Disable add-ons for an Apigee environment. + /// + /// To get more information about EnvironmentAddonsConfig, see: + /// + /// * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) + /// * How-to Guides + /// * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) + /// + /// ## Example Usage + /// + /// ## Import + /// + /// EnvironmentAddonsConfig can be imported using any of these accepted formats: + /// + /// * `{{env_id}}` + /// + /// When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} + /// ``` + /// + [GcpResourceType("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig")] + public partial class EnvironmentAddonsConfig : global::Pulumi.CustomResource + { + /// + /// Flag to enable/disable Analytics. + /// + [Output("analyticsEnabled")] + public Output AnalyticsEnabled { get; private set; } = null!; + + /// + /// The Apigee environment group associated with the Apigee environment, + /// in the format `organizations/{{org_name}}/environments/{{env_name}}`. + /// + /// + /// - - - + /// + [Output("envId")] + public Output EnvId { get; private set; } = null!; + + + /// + /// Create a EnvironmentAddonsConfig 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 EnvironmentAddonsConfig(string name, EnvironmentAddonsConfigArgs args, CustomResourceOptions? options = null) + : base("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", name, args ?? new EnvironmentAddonsConfigArgs(), MakeResourceOptions(options, "")) + { + } + + private EnvironmentAddonsConfig(string name, Input id, EnvironmentAddonsConfigState? state = null, CustomResourceOptions? options = null) + : base("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", 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 EnvironmentAddonsConfig 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 EnvironmentAddonsConfig Get(string name, Input id, EnvironmentAddonsConfigState? state = null, CustomResourceOptions? options = null) + { + return new EnvironmentAddonsConfig(name, id, state, options); + } + } + + public sealed class EnvironmentAddonsConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Flag to enable/disable Analytics. + /// + [Input("analyticsEnabled")] + public Input? AnalyticsEnabled { get; set; } + + /// + /// The Apigee environment group associated with the Apigee environment, + /// in the format `organizations/{{org_name}}/environments/{{env_name}}`. + /// + /// + /// - - - + /// + [Input("envId", required: true)] + public Input EnvId { get; set; } = null!; + + public EnvironmentAddonsConfigArgs() + { + } + public static new EnvironmentAddonsConfigArgs Empty => new EnvironmentAddonsConfigArgs(); + } + + public sealed class EnvironmentAddonsConfigState : global::Pulumi.ResourceArgs + { + /// + /// Flag to enable/disable Analytics. + /// + [Input("analyticsEnabled")] + public Input? AnalyticsEnabled { get; set; } + + /// + /// The Apigee environment group associated with the Apigee environment, + /// in the format `organizations/{{org_name}}/environments/{{env_name}}`. + /// + /// + /// - - - + /// + [Input("envId")] + public Input? EnvId { get; set; } + + public EnvironmentAddonsConfigState() + { + } + public static new EnvironmentAddonsConfigState Empty => new EnvironmentAddonsConfigState(); + } +} diff --git a/sdk/dotnet/ArtifactRegistry/Repository.cs b/sdk/dotnet/ArtifactRegistry/Repository.cs index 02e711f88f..684dc973bc 100644 --- a/sdk/dotnet/ArtifactRegistry/Repository.cs +++ b/sdk/dotnet/ArtifactRegistry/Repository.cs @@ -291,6 +291,25 @@ namespace Pulumi.Gcp.ArtifactRegistry /// { /// new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs /// { + /// Id = "delete-untagged", + /// Action = "DELETE", + /// Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs + /// { + /// TagState = "UNTAGGED", + /// }, + /// }, + /// new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs + /// { + /// Id = "keep-new-untagged", + /// Action = "KEEP", + /// Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs + /// { + /// TagState = "UNTAGGED", + /// NewerThan = "7d", + /// }, + /// }, + /// new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs + /// { /// Id = "delete-prerelease", /// Action = "DELETE", /// Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs @@ -301,7 +320,7 @@ namespace Pulumi.Gcp.ArtifactRegistry /// "alpha", /// "v0", /// }, - /// OlderThan = "2592000s", + /// OlderThan = "30d", /// }, /// }, /// new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs diff --git a/sdk/dotnet/BigQuery/Connection.cs b/sdk/dotnet/BigQuery/Connection.cs index 476237f474..fff527c754 100644 --- a/sdk/dotnet/BigQuery/Connection.cs +++ b/sdk/dotnet/BigQuery/Connection.cs @@ -354,7 +354,7 @@ namespace Pulumi.Gcp.BigQuery /// { /// Name = "user", /// Instance = instance.Name, - /// Password = "tf-test-my-password_77884", + /// Password = "tf-test-my-password_15222", /// }); /// /// var bqSa = Gcp.BigQuery.GetDefaultServiceAccount.Invoke(); diff --git a/sdk/dotnet/BigQuery/Routine.cs b/sdk/dotnet/BigQuery/Routine.cs index b219c14041..72ee60c6db 100644 --- a/sdk/dotnet/BigQuery/Routine.cs +++ b/sdk/dotnet/BigQuery/Routine.cs @@ -309,7 +309,7 @@ namespace Pulumi.Gcp.BigQuery /// { /// var test = new Gcp.BigQuery.Dataset("test", new() /// { - /// DatasetId = "tf_test_dataset_id_15222", + /// DatasetId = "tf_test_dataset_id_81126", /// }); /// /// var customMaskingRoutine = new Gcp.BigQuery.Routine("custom_masking_routine", new() diff --git a/sdk/dotnet/Billing/ProjectInfo.cs b/sdk/dotnet/Billing/ProjectInfo.cs index 7674c944ab..cf24481c04 100644 --- a/sdk/dotnet/Billing/ProjectInfo.cs +++ b/sdk/dotnet/Billing/ProjectInfo.cs @@ -32,8 +32,8 @@ namespace Pulumi.Gcp.Billing /// { /// var project = new Gcp.Organizations.Project("project", new() /// { - /// ProjectId = "tf-test_81126", - /// Name = "tf-test_88717", + /// ProjectId = "tf-test_88717", + /// Name = "tf-test_85794", /// OrgId = "123456789", /// DeletionPolicy = "DELETE", /// }); diff --git a/sdk/dotnet/Chronicle/DataAccessLabel.cs b/sdk/dotnet/Chronicle/DataAccessLabel.cs index 1acee8c539..8582bfad38 100644 --- a/sdk/dotnet/Chronicle/DataAccessLabel.cs +++ b/sdk/dotnet/Chronicle/DataAccessLabel.cs @@ -75,9 +75,9 @@ public partial class DataAccessLabel : global::Pulumi.CustomResource /// /// Required. The ID to use for the data access label, which will become the label's - /// display name and the final component of the label's resource name. It must - /// only contain ASCII lowercase letters, numbers, and dashes; it must begin - /// with a letter, and it must not exceed 1000 characters. + /// display name and the final component of the label's resource name. The + /// maximum number of characters should be 63. Regex pattern is as per AIP: + /// https://google.aip.dev/122#resource-id-segments /// /// /// - - - @@ -190,9 +190,9 @@ public sealed class DataAccessLabelArgs : global::Pulumi.ResourceArgs { /// /// Required. The ID to use for the data access label, which will become the label's - /// display name and the final component of the label's resource name. It must - /// only contain ASCII lowercase letters, numbers, and dashes; it must begin - /// with a letter, and it must not exceed 1000 characters. + /// display name and the final component of the label's resource name. The + /// maximum number of characters should be 63. Regex pattern is as per AIP: + /// https://google.aip.dev/122#resource-id-segments /// /// /// - - - @@ -253,9 +253,9 @@ public sealed class DataAccessLabelState : global::Pulumi.ResourceArgs /// /// Required. The ID to use for the data access label, which will become the label's - /// display name and the final component of the label's resource name. It must - /// only contain ASCII lowercase letters, numbers, and dashes; it must begin - /// with a letter, and it must not exceed 1000 characters. + /// display name and the final component of the label's resource name. The + /// maximum number of characters should be 63. Regex pattern is as per AIP: + /// https://google.aip.dev/122#resource-id-segments /// /// /// - - - diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryArgs.cs new file mode 100644 index 0000000000..2fd18441aa --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryArgs.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Inputs +{ + + public sealed class ReferenceListEntryArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. The value of the entry. Maximum length is 512 characters. + /// + /// - - - + /// + [Input("value", required: true)] + public Input Value { get; set; } = null!; + + public ReferenceListEntryArgs() + { + } + public static new ReferenceListEntryArgs Empty => new ReferenceListEntryArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryGetArgs.cs new file mode 100644 index 0000000000..5ca4c5c37b --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListEntryGetArgs.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Inputs +{ + + public sealed class ReferenceListEntryGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. The value of the entry. Maximum length is 512 characters. + /// + /// - - - + /// + [Input("value", required: true)] + public Input Value { get; set; } = null!; + + public ReferenceListEntryGetArgs() + { + } + public static new ReferenceListEntryGetArgs Empty => new ReferenceListEntryGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoArgs.cs new file mode 100644 index 0000000000..3f22953324 --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoArgs.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.Chronicle.Inputs +{ + + public sealed class ReferenceListScopeInfoArgs : global::Pulumi.ResourceArgs + { + /// + /// ReferenceListScope specifies the list of scope names of the reference list. + /// Structure is documented below. + /// + [Input("referenceListScope", required: true)] + public Input ReferenceListScope { get; set; } = null!; + + public ReferenceListScopeInfoArgs() + { + } + public static new ReferenceListScopeInfoArgs Empty => new ReferenceListScopeInfoArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoGetArgs.cs new file mode 100644 index 0000000000..bcd266be6c --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoGetArgs.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.Chronicle.Inputs +{ + + public sealed class ReferenceListScopeInfoGetArgs : global::Pulumi.ResourceArgs + { + /// + /// ReferenceListScope specifies the list of scope names of the reference list. + /// Structure is documented below. + /// + [Input("referenceListScope", required: true)] + public Input ReferenceListScope { get; set; } = null!; + + public ReferenceListScopeInfoGetArgs() + { + } + public static new ReferenceListScopeInfoGetArgs Empty => new ReferenceListScopeInfoGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeArgs.cs new file mode 100644 index 0000000000..5d732b129a --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeArgs.cs @@ -0,0 +1,34 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Inputs +{ + + public sealed class ReferenceListScopeInfoReferenceListScopeArgs : global::Pulumi.ResourceArgs + { + [Input("scopeNames")] + private InputList? _scopeNames; + + /// + /// Optional. The list of scope names of the reference list. The scope names should be + /// full resource names and should be of the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + /// + public InputList ScopeNames + { + get => _scopeNames ?? (_scopeNames = new InputList()); + set => _scopeNames = value; + } + + public ReferenceListScopeInfoReferenceListScopeArgs() + { + } + public static new ReferenceListScopeInfoReferenceListScopeArgs Empty => new ReferenceListScopeInfoReferenceListScopeArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeGetArgs.cs new file mode 100644 index 0000000000..602fab3453 --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/ReferenceListScopeInfoReferenceListScopeGetArgs.cs @@ -0,0 +1,34 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Inputs +{ + + public sealed class ReferenceListScopeInfoReferenceListScopeGetArgs : global::Pulumi.ResourceArgs + { + [Input("scopeNames")] + private InputList? _scopeNames; + + /// + /// Optional. The list of scope names of the reference list. The scope names should be + /// full resource names and should be of the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + /// + public InputList ScopeNames + { + get => _scopeNames ?? (_scopeNames = new InputList()); + set => _scopeNames = value; + } + + public ReferenceListScopeInfoReferenceListScopeGetArgs() + { + } + public static new ReferenceListScopeInfoReferenceListScopeGetArgs Empty => new ReferenceListScopeInfoReferenceListScopeGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticArgs.cs new file mode 100644 index 0000000000..09da3d3a19 --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticArgs.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.Chronicle.Inputs +{ + + public sealed class RuleCompilationDiagnosticArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. The diagnostic message. + /// + [Input("message")] + public Input? Message { get; set; } + + /// + /// CompilationPosition represents the location of a compilation diagnostic in + /// rule text. + /// Structure is documented below. + /// + [Input("position")] + public Input? Position { get; set; } + + /// + /// (Output) + /// Output only. The severity of a rule's compilation diagnostic. + /// Possible values: + /// SEVERITY_UNSPECIFIED + /// WARNING + /// ERROR + /// + [Input("severity")] + public Input? Severity { get; set; } + + /// + /// (Output) + /// Output only. Link to documentation that describes a diagnostic in more detail. + /// + [Input("uri")] + public Input? Uri { get; set; } + + public RuleCompilationDiagnosticArgs() + { + } + public static new RuleCompilationDiagnosticArgs Empty => new RuleCompilationDiagnosticArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticGetArgs.cs new file mode 100644 index 0000000000..6f48dcc3db --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticGetArgs.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.Chronicle.Inputs +{ + + public sealed class RuleCompilationDiagnosticGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. The diagnostic message. + /// + [Input("message")] + public Input? Message { get; set; } + + /// + /// CompilationPosition represents the location of a compilation diagnostic in + /// rule text. + /// Structure is documented below. + /// + [Input("position")] + public Input? Position { get; set; } + + /// + /// (Output) + /// Output only. The severity of a rule's compilation diagnostic. + /// Possible values: + /// SEVERITY_UNSPECIFIED + /// WARNING + /// ERROR + /// + [Input("severity")] + public Input? Severity { get; set; } + + /// + /// (Output) + /// Output only. Link to documentation that describes a diagnostic in more detail. + /// + [Input("uri")] + public Input? Uri { get; set; } + + public RuleCompilationDiagnosticGetArgs() + { + } + public static new RuleCompilationDiagnosticGetArgs Empty => new RuleCompilationDiagnosticGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionArgs.cs new file mode 100644 index 0000000000..5be04c9f86 --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionArgs.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.Chronicle.Inputs +{ + + public sealed class RuleCompilationDiagnosticPositionArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. End column number, beginning at 1. + /// + [Input("endColumn")] + public Input? EndColumn { get; set; } + + /// + /// (Output) + /// Output only. End line number, beginning at 1. + /// + [Input("endLine")] + public Input? EndLine { get; set; } + + /// + /// (Output) + /// Output only. Start column number, beginning at 1. + /// + [Input("startColumn")] + public Input? StartColumn { get; set; } + + /// + /// (Output) + /// Output only. Start line number, beginning at 1. + /// + [Input("startLine")] + public Input? StartLine { get; set; } + + public RuleCompilationDiagnosticPositionArgs() + { + } + public static new RuleCompilationDiagnosticPositionArgs Empty => new RuleCompilationDiagnosticPositionArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionGetArgs.cs new file mode 100644 index 0000000000..569c5500e0 --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleCompilationDiagnosticPositionGetArgs.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.Chronicle.Inputs +{ + + public sealed class RuleCompilationDiagnosticPositionGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. End column number, beginning at 1. + /// + [Input("endColumn")] + public Input? EndColumn { get; set; } + + /// + /// (Output) + /// Output only. End line number, beginning at 1. + /// + [Input("endLine")] + public Input? EndLine { get; set; } + + /// + /// (Output) + /// Output only. Start column number, beginning at 1. + /// + [Input("startColumn")] + public Input? StartColumn { get; set; } + + /// + /// (Output) + /// Output only. Start line number, beginning at 1. + /// + [Input("startLine")] + public Input? StartLine { get; set; } + + public RuleCompilationDiagnosticPositionGetArgs() + { + } + public static new RuleCompilationDiagnosticPositionGetArgs Empty => new RuleCompilationDiagnosticPositionGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleSeverityArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleSeverityArgs.cs new file mode 100644 index 0000000000..05079b996f --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleSeverityArgs.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.Chronicle.Inputs +{ + + public sealed class RuleSeverityArgs : global::Pulumi.ResourceArgs + { + /// + /// The display name of the severity level. Extracted from the meta section of + /// the rule text. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + public RuleSeverityArgs() + { + } + public static new RuleSeverityArgs Empty => new RuleSeverityArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Inputs/RuleSeverityGetArgs.cs b/sdk/dotnet/Chronicle/Inputs/RuleSeverityGetArgs.cs new file mode 100644 index 0000000000..c01fa3c9cd --- /dev/null +++ b/sdk/dotnet/Chronicle/Inputs/RuleSeverityGetArgs.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.Chronicle.Inputs +{ + + public sealed class RuleSeverityGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The display name of the severity level. Extracted from the meta section of + /// the rule text. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + public RuleSeverityGetArgs() + { + } + public static new RuleSeverityGetArgs Empty => new RuleSeverityGetArgs(); + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/ReferenceListEntry.cs b/sdk/dotnet/Chronicle/Outputs/ReferenceListEntry.cs new file mode 100644 index 0000000000..d03287be69 --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/ReferenceListEntry.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.Chronicle.Outputs +{ + + [OutputType] + public sealed class ReferenceListEntry + { + /// + /// Required. The value of the entry. Maximum length is 512 characters. + /// + /// - - - + /// + public readonly string Value; + + [OutputConstructor] + private ReferenceListEntry(string value) + { + Value = value; + } + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfo.cs b/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfo.cs new file mode 100644 index 0000000000..c141eae58f --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfo.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Outputs +{ + + [OutputType] + public sealed class ReferenceListScopeInfo + { + /// + /// ReferenceListScope specifies the list of scope names of the reference list. + /// Structure is documented below. + /// + public readonly Outputs.ReferenceListScopeInfoReferenceListScope ReferenceListScope; + + [OutputConstructor] + private ReferenceListScopeInfo(Outputs.ReferenceListScopeInfoReferenceListScope referenceListScope) + { + ReferenceListScope = referenceListScope; + } + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfoReferenceListScope.cs b/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfoReferenceListScope.cs new file mode 100644 index 0000000000..8b5ed60281 --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/ReferenceListScopeInfoReferenceListScope.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.Chronicle.Outputs +{ + + [OutputType] + public sealed class ReferenceListScopeInfoReferenceListScope + { + /// + /// Optional. The list of scope names of the reference list. The scope names should be + /// full resource names and should be of the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + /// + public readonly ImmutableArray ScopeNames; + + [OutputConstructor] + private ReferenceListScopeInfoReferenceListScope(ImmutableArray scopeNames) + { + ScopeNames = scopeNames; + } + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnostic.cs b/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnostic.cs new file mode 100644 index 0000000000..5da1bf7746 --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnostic.cs @@ -0,0 +1,58 @@ +// *** 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.Chronicle.Outputs +{ + + [OutputType] + public sealed class RuleCompilationDiagnostic + { + /// + /// (Output) + /// Output only. The diagnostic message. + /// + public readonly string? Message; + /// + /// CompilationPosition represents the location of a compilation diagnostic in + /// rule text. + /// Structure is documented below. + /// + public readonly Outputs.RuleCompilationDiagnosticPosition? Position; + /// + /// (Output) + /// Output only. The severity of a rule's compilation diagnostic. + /// Possible values: + /// SEVERITY_UNSPECIFIED + /// WARNING + /// ERROR + /// + public readonly string? Severity; + /// + /// (Output) + /// Output only. Link to documentation that describes a diagnostic in more detail. + /// + public readonly string? Uri; + + [OutputConstructor] + private RuleCompilationDiagnostic( + string? message, + + Outputs.RuleCompilationDiagnosticPosition? position, + + string? severity, + + string? uri) + { + Message = message; + Position = position; + Severity = severity; + Uri = uri; + } + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnosticPosition.cs b/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnosticPosition.cs new file mode 100644 index 0000000000..3d9c8f0d25 --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/RuleCompilationDiagnosticPosition.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.Chronicle.Outputs +{ + + [OutputType] + public sealed class RuleCompilationDiagnosticPosition + { + /// + /// (Output) + /// Output only. End column number, beginning at 1. + /// + public readonly int? EndColumn; + /// + /// (Output) + /// Output only. End line number, beginning at 1. + /// + public readonly int? EndLine; + /// + /// (Output) + /// Output only. Start column number, beginning at 1. + /// + public readonly int? StartColumn; + /// + /// (Output) + /// Output only. Start line number, beginning at 1. + /// + public readonly int? StartLine; + + [OutputConstructor] + private RuleCompilationDiagnosticPosition( + int? endColumn, + + int? endLine, + + int? startColumn, + + int? startLine) + { + EndColumn = endColumn; + EndLine = endLine; + StartColumn = startColumn; + StartLine = startLine; + } + } +} diff --git a/sdk/dotnet/Chronicle/Outputs/RuleSeverity.cs b/sdk/dotnet/Chronicle/Outputs/RuleSeverity.cs new file mode 100644 index 0000000000..bf77d92f86 --- /dev/null +++ b/sdk/dotnet/Chronicle/Outputs/RuleSeverity.cs @@ -0,0 +1,28 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Chronicle.Outputs +{ + + [OutputType] + public sealed class RuleSeverity + { + /// + /// The display name of the severity level. Extracted from the meta section of + /// the rule text. + /// + public readonly string? DisplayName; + + [OutputConstructor] + private RuleSeverity(string? displayName) + { + DisplayName = displayName; + } + } +} diff --git a/sdk/dotnet/Chronicle/ReferenceList.cs b/sdk/dotnet/Chronicle/ReferenceList.cs new file mode 100644 index 0000000000..91fc7079f3 --- /dev/null +++ b/sdk/dotnet/Chronicle/ReferenceList.cs @@ -0,0 +1,392 @@ +// *** 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.Chronicle +{ + /// + /// ## Example Usage + /// + /// ### Chronicle Referencelist Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new Gcp.Chronicle.ReferenceList("example", new() + /// { + /// Location = "us", + /// Instance = "00000000-0000-0000-0000-000000000000", + /// ReferenceListId = "reference_list_id", + /// Description = "referencelist-description", + /// Entries = new[] + /// { + /// new Gcp.Chronicle.Inputs.ReferenceListEntryArgs + /// { + /// Value = "referencelist-entry-value", + /// }, + /// }, + /// SyntaxType = "REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING", + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ReferenceList can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` + /// + /// * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` + /// + /// * `{{location}}/{{instance}}/{{reference_list_id}}` + /// + /// When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} + /// ``` + /// + [GcpResourceType("gcp:chronicle/referenceList:ReferenceList")] + public partial class ReferenceList : global::Pulumi.CustomResource + { + /// + /// Required. A user-provided description of the reference list. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Output only. The unique display name of the reference list. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// Required. The entries of the reference list. + /// When listed, they are returned in the order that was specified at creation + /// or update. The combined size of the values of the reference list may not + /// exceed 6MB. + /// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + /// Structure is documented below. + /// + [Output("entries")] + public Output> Entries { get; private set; } = null!; + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Output("instance")] + public Output Instance { get; private set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Output only. The resource name of the reference list. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Required. The ID to use for the reference list. This is also the display name for + /// the reference list. It must satisfy the following requirements: + /// - Starts with letter. + /// - Contains only letters, numbers and underscore. + /// - Has length < 256. + /// - Must be unique. + /// + [Output("referenceListId")] + public Output ReferenceListId { get; private set; } = null!; + + /// + /// Output only. The timestamp when the reference list was last updated. + /// + [Output("revisionCreateTime")] + public Output RevisionCreateTime { get; private set; } = null!; + + /// + /// Output only. The count of self-authored rules using the reference list. + /// + [Output("ruleAssociationsCount")] + public Output RuleAssociationsCount { get; private set; } = null!; + + /// + /// Output only. The resource names for the associated self-authored Rules that use this + /// reference list. + /// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + /// + [Output("rules")] + public Output> Rules { get; private set; } = null!; + + /// + /// ScopeInfo specifies the scope info of the reference list. + /// Structure is documented below. + /// + [Output("scopeInfos")] + public Output> ScopeInfos { get; private set; } = null!; + + /// + /// Possible values: + /// REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + /// REFERENCE_LIST_SYNTAX_TYPE_REGEX + /// REFERENCE_LIST_SYNTAX_TYPE_CIDR + /// + [Output("syntaxType")] + public Output SyntaxType { get; private set; } = null!; + + + /// + /// Create a ReferenceList 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 ReferenceList(string name, ReferenceListArgs args, CustomResourceOptions? options = null) + : base("gcp:chronicle/referenceList:ReferenceList", name, args ?? new ReferenceListArgs(), MakeResourceOptions(options, "")) + { + } + + private ReferenceList(string name, Input id, ReferenceListState? state = null, CustomResourceOptions? options = null) + : base("gcp:chronicle/referenceList:ReferenceList", 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 ReferenceList 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 ReferenceList Get(string name, Input id, ReferenceListState? state = null, CustomResourceOptions? options = null) + { + return new ReferenceList(name, id, state, options); + } + } + + public sealed class ReferenceListArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. A user-provided description of the reference list. + /// + [Input("description", required: true)] + public Input Description { get; set; } = null!; + + [Input("entries", required: true)] + private InputList? _entries; + + /// + /// Required. The entries of the reference list. + /// When listed, they are returned in the order that was specified at creation + /// or update. The combined size of the values of the reference list may not + /// exceed 6MB. + /// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + /// Structure is documented below. + /// + public InputList Entries + { + get => _entries ?? (_entries = new InputList()); + set => _entries = value; + } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Input("instance", required: true)] + public Input Instance { get; set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + [Input("project")] + public Input? Project { get; set; } + + /// + /// Required. The ID to use for the reference list. This is also the display name for + /// the reference list. It must satisfy the following requirements: + /// - Starts with letter. + /// - Contains only letters, numbers and underscore. + /// - Has length < 256. + /// - Must be unique. + /// + [Input("referenceListId", required: true)] + public Input ReferenceListId { get; set; } = null!; + + /// + /// Possible values: + /// REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + /// REFERENCE_LIST_SYNTAX_TYPE_REGEX + /// REFERENCE_LIST_SYNTAX_TYPE_CIDR + /// + [Input("syntaxType", required: true)] + public Input SyntaxType { get; set; } = null!; + + public ReferenceListArgs() + { + } + public static new ReferenceListArgs Empty => new ReferenceListArgs(); + } + + public sealed class ReferenceListState : global::Pulumi.ResourceArgs + { + /// + /// Required. A user-provided description of the reference list. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Output only. The unique display name of the reference list. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + [Input("entries")] + private InputList? _entries; + + /// + /// Required. The entries of the reference list. + /// When listed, they are returned in the order that was specified at creation + /// or update. The combined size of the values of the reference list may not + /// exceed 6MB. + /// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + /// Structure is documented below. + /// + public InputList Entries + { + get => _entries ?? (_entries = new InputList()); + set => _entries = value; + } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Input("instance")] + public Input? Instance { get; set; } + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Output only. The resource name of the reference list. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("project")] + public Input? Project { get; set; } + + /// + /// Required. The ID to use for the reference list. This is also the display name for + /// the reference list. It must satisfy the following requirements: + /// - Starts with letter. + /// - Contains only letters, numbers and underscore. + /// - Has length < 256. + /// - Must be unique. + /// + [Input("referenceListId")] + public Input? ReferenceListId { get; set; } + + /// + /// Output only. The timestamp when the reference list was last updated. + /// + [Input("revisionCreateTime")] + public Input? RevisionCreateTime { get; set; } + + /// + /// Output only. The count of self-authored rules using the reference list. + /// + [Input("ruleAssociationsCount")] + public Input? RuleAssociationsCount { get; set; } + + [Input("rules")] + private InputList? _rules; + + /// + /// Output only. The resource names for the associated self-authored Rules that use this + /// reference list. + /// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + /// + public InputList Rules + { + get => _rules ?? (_rules = new InputList()); + set => _rules = value; + } + + [Input("scopeInfos")] + private InputList? _scopeInfos; + + /// + /// ScopeInfo specifies the scope info of the reference list. + /// Structure is documented below. + /// + public InputList ScopeInfos + { + get => _scopeInfos ?? (_scopeInfos = new InputList()); + set => _scopeInfos = value; + } + + /// + /// Possible values: + /// REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + /// REFERENCE_LIST_SYNTAX_TYPE_REGEX + /// REFERENCE_LIST_SYNTAX_TYPE_CIDR + /// + [Input("syntaxType")] + public Input? SyntaxType { get; set; } + + public ReferenceListState() + { + } + public static new ReferenceListState Empty => new ReferenceListState(); + } +} diff --git a/sdk/dotnet/Chronicle/Rule.cs b/sdk/dotnet/Chronicle/Rule.cs new file mode 100644 index 0000000000..d5dcd3ca18 --- /dev/null +++ b/sdk/dotnet/Chronicle/Rule.cs @@ -0,0 +1,663 @@ +// *** 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.Chronicle +{ + /// + /// ## Example Usage + /// + /// ### Chronicle Rule Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new Gcp.Chronicle.Rule("example", new() + /// { + /// Location = "us", + /// Instance = "00000000-0000-0000-0000-000000000000", + /// DeletionPolicy = "DEFAULT", + /// Text = @"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e } + /// ", + /// }); + /// + /// }); + /// ``` + /// ### Chronicle Rule With Force Deletion + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new Gcp.Chronicle.Rule("example", new() + /// { + /// Location = "us", + /// Instance = "00000000-0000-0000-0000-000000000000", + /// DeletionPolicy = "FORCE", + /// Text = @"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e } + /// ", + /// }); + /// + /// }); + /// ``` + /// ### Chronicle Rule With Data Access Scope + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var dataAccessScopeTest = new Gcp.Chronicle.DataAccessScope("data_access_scope_test", new() + /// { + /// Location = "us", + /// Instance = "00000000-0000-0000-0000-000000000000", + /// DataAccessScopeId = "scope-name", + /// Description = "scope-description", + /// AllowedDataAccessLabels = new[] + /// { + /// new Gcp.Chronicle.Inputs.DataAccessScopeAllowedDataAccessLabelArgs + /// { + /// LogType = "GCP_CLOUDAUDIT", + /// }, + /// }, + /// }); + /// + /// var example = new Gcp.Chronicle.Rule("example", new() + /// { + /// Location = "us", + /// Instance = "00000000-0000-0000-0000-000000000000", + /// Scope = googleChronicleDataAccessScope.DataAccessScopeTest.Name, + /// Text = @"rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e } + /// ", + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// Rule can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` + /// + /// * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` + /// + /// * `{{location}}/{{instance}}/{{rule_id}}` + /// + /// When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} + /// ``` + /// + [GcpResourceType("gcp:chronicle/rule:Rule")] + public partial class Rule : global::Pulumi.CustomResource + { + /// + /// Output only. The run frequencies that are allowed for the rule. + /// Populated in BASIC view and FULL view. + /// + [Output("allowedRunFrequencies")] + public Output> AllowedRunFrequencies { get; private set; } = null!; + + /// + /// Output only. The author of the rule. Extracted from the meta section of text. + /// Populated in BASIC view and FULL view. + /// + [Output("author")] + public Output Author { get; private set; } = null!; + + /// + /// Output only. A list of a rule's corresponding compilation diagnostic messages + /// such as compilation errors and compilation warnings. + /// Populated in FULL view. + /// Structure is documented below. + /// + [Output("compilationDiagnostics")] + public Output> CompilationDiagnostics { get; private set; } = null!; + + /// + /// Output only. The current compilation state of the rule. + /// Populated in FULL view. + /// Possible values: + /// COMPILATION_STATE_UNSPECIFIED + /// SUCCEEDED + /// FAILED + /// + [Output("compilationState")] + public Output CompilationState { get; private set; } = null!; + + /// + /// Output only. The timestamp of when the rule was created. + /// Populated in FULL view. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// Output only. Resource names of the data tables used in this rule. + /// + [Output("dataTables")] + public Output> DataTables { get; private set; } = null!; + + /// + /// Policy to determine if the rule should be deleted forcefully. + /// If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + /// will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + /// rule has no associated retrohunts, including completed retrohunts, and no + /// associated detections. Regardless of this field's value, the rule + /// deployment associated with this rule will also be deleted. + /// Possible values: DEFAULT, FORCE + /// + [Output("deletionPolicy")] + public Output DeletionPolicy { get; private set; } = null!; + + /// + /// The display name of the severity level. Extracted from the meta section of + /// the rule text. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// The etag for this rule. + /// If this is provided on update, the request will succeed if and only if it + /// matches the server-computed value, and will fail with an ABORTED error + /// otherwise. + /// Populated in BASIC view and FULL view. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + /// + /// - - - + /// + [Output("instance")] + public Output Instance { get; private set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Output only. Additional metadata specified in the meta section of text. + /// Populated in FULL view. + /// + [Output("metadata")] + public Output> Metadata { get; private set; } = null!; + + /// + /// Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Output only. Indicate the rule can run in near real time live rule. + /// If this is true, the rule uses the near real time live rule when the run + /// frequency is set to LIVE. + /// + [Output("nearRealTimeLiveRuleEligible")] + public Output NearRealTimeLiveRuleEligible { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Output only. Resource names of the reference lists used in this rule. + /// Populated in FULL view. + /// + [Output("referenceLists")] + public Output> ReferenceLists { get; private set; } = null!; + + /// + /// Output only. The timestamp of when the rule revision was created. + /// Populated in FULL, REVISION_METADATA_ONLY views. + /// + [Output("revisionCreateTime")] + public Output RevisionCreateTime { get; private set; } = null!; + + /// + /// Output only. The revision ID of the rule. + /// A new revision is created whenever the rule text is changed in any way. + /// Format: v_{10 digits}_{9 digits} + /// Populated in REVISION_METADATA_ONLY view and FULL view. + /// + [Output("revisionId")] + public Output RevisionId { get; private set; } = null!; + + /// + /// Rule Id is the ID of the Rule. + /// + [Output("ruleId")] + public Output RuleId { get; private set; } = null!; + + /// + /// Resource name of the DataAccessScope bound to this rule. + /// Populated in BASIC view and FULL view. + /// If reference lists are used in the rule, validations will be performed + /// against this scope to ensure that the reference lists are compatible with + /// both the user's and the rule's scopes. + /// The scope should be in the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + /// + [Output("scope")] + public Output Scope { get; private set; } = null!; + + /// + /// (Output) + /// Output only. The severity of a rule's compilation diagnostic. + /// Possible values: + /// SEVERITY_UNSPECIFIED + /// WARNING + /// ERROR + /// + [Output("severities")] + public Output> Severities { get; private set; } = null!; + + /// + /// The YARA-L content of the rule. + /// Populated in FULL view. + /// + [Output("text")] + public Output Text { get; private set; } = null!; + + /// + /// Possible values: + /// RULE_TYPE_UNSPECIFIED + /// SINGLE_EVENT + /// MULTI_EVENT + /// + [Output("type")] + public Output Type { get; private set; } = null!; + + + /// + /// Create a Rule 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 Rule(string name, RuleArgs args, CustomResourceOptions? options = null) + : base("gcp:chronicle/rule:Rule", name, args ?? new RuleArgs(), MakeResourceOptions(options, "")) + { + } + + private Rule(string name, Input id, RuleState? state = null, CustomResourceOptions? options = null) + : base("gcp:chronicle/rule:Rule", 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 Rule 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 Rule Get(string name, Input id, RuleState? state = null, CustomResourceOptions? options = null) + { + return new Rule(name, id, state, options); + } + } + + public sealed class RuleArgs : global::Pulumi.ResourceArgs + { + /// + /// Policy to determine if the rule should be deleted forcefully. + /// If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + /// will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + /// rule has no associated retrohunts, including completed retrohunts, and no + /// associated detections. Regardless of this field's value, the rule + /// deployment associated with this rule will also be deleted. + /// Possible values: DEFAULT, FORCE + /// + [Input("deletionPolicy")] + public Input? DeletionPolicy { get; set; } + + /// + /// The etag for this rule. + /// If this is provided on update, the request will succeed if and only if it + /// matches the server-computed value, and will fail with an ABORTED error + /// otherwise. + /// Populated in BASIC view and FULL view. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + /// + /// - - - + /// + [Input("instance", required: true)] + public Input Instance { get; set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Rule Id is the ID of the Rule. + /// + [Input("ruleId")] + public Input? RuleId { get; set; } + + /// + /// Resource name of the DataAccessScope bound to this rule. + /// Populated in BASIC view and FULL view. + /// If reference lists are used in the rule, validations will be performed + /// against this scope to ensure that the reference lists are compatible with + /// both the user's and the rule's scopes. + /// The scope should be in the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + /// + [Input("scope")] + public Input? Scope { get; set; } + + /// + /// The YARA-L content of the rule. + /// Populated in FULL view. + /// + [Input("text")] + public Input? Text { get; set; } + + public RuleArgs() + { + } + public static new RuleArgs Empty => new RuleArgs(); + } + + public sealed class RuleState : global::Pulumi.ResourceArgs + { + [Input("allowedRunFrequencies")] + private InputList? _allowedRunFrequencies; + + /// + /// Output only. The run frequencies that are allowed for the rule. + /// Populated in BASIC view and FULL view. + /// + public InputList AllowedRunFrequencies + { + get => _allowedRunFrequencies ?? (_allowedRunFrequencies = new InputList()); + set => _allowedRunFrequencies = value; + } + + /// + /// Output only. The author of the rule. Extracted from the meta section of text. + /// Populated in BASIC view and FULL view. + /// + [Input("author")] + public Input? Author { get; set; } + + [Input("compilationDiagnostics")] + private InputList? _compilationDiagnostics; + + /// + /// Output only. A list of a rule's corresponding compilation diagnostic messages + /// such as compilation errors and compilation warnings. + /// Populated in FULL view. + /// Structure is documented below. + /// + public InputList CompilationDiagnostics + { + get => _compilationDiagnostics ?? (_compilationDiagnostics = new InputList()); + set => _compilationDiagnostics = value; + } + + /// + /// Output only. The current compilation state of the rule. + /// Populated in FULL view. + /// Possible values: + /// COMPILATION_STATE_UNSPECIFIED + /// SUCCEEDED + /// FAILED + /// + [Input("compilationState")] + public Input? CompilationState { get; set; } + + /// + /// Output only. The timestamp of when the rule was created. + /// Populated in FULL view. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + [Input("dataTables")] + private InputList? _dataTables; + + /// + /// Output only. Resource names of the data tables used in this rule. + /// + public InputList DataTables + { + get => _dataTables ?? (_dataTables = new InputList()); + set => _dataTables = value; + } + + /// + /// Policy to determine if the rule should be deleted forcefully. + /// If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + /// will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + /// rule has no associated retrohunts, including completed retrohunts, and no + /// associated detections. Regardless of this field's value, the rule + /// deployment associated with this rule will also be deleted. + /// Possible values: DEFAULT, FORCE + /// + [Input("deletionPolicy")] + public Input? DeletionPolicy { get; set; } + + /// + /// The display name of the severity level. Extracted from the meta section of + /// the rule text. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The etag for this rule. + /// If this is provided on update, the request will succeed if and only if it + /// matches the server-computed value, and will fail with an ABORTED error + /// otherwise. + /// Populated in BASIC view and FULL view. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + /// + /// - - - + /// + [Input("instance")] + public Input? Instance { get; set; } + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location")] + public Input? Location { get; set; } + + [Input("metadata")] + private InputMap? _metadata; + + /// + /// Output only. Additional metadata specified in the meta section of text. + /// Populated in FULL view. + /// + public InputMap Metadata + { + get => _metadata ?? (_metadata = new InputMap()); + set => _metadata = value; + } + + /// + /// Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Output only. Indicate the rule can run in near real time live rule. + /// If this is true, the rule uses the near real time live rule when the run + /// frequency is set to LIVE. + /// + [Input("nearRealTimeLiveRuleEligible")] + public Input? NearRealTimeLiveRuleEligible { get; set; } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("referenceLists")] + private InputList? _referenceLists; + + /// + /// Output only. Resource names of the reference lists used in this rule. + /// Populated in FULL view. + /// + public InputList ReferenceLists + { + get => _referenceLists ?? (_referenceLists = new InputList()); + set => _referenceLists = value; + } + + /// + /// Output only. The timestamp of when the rule revision was created. + /// Populated in FULL, REVISION_METADATA_ONLY views. + /// + [Input("revisionCreateTime")] + public Input? RevisionCreateTime { get; set; } + + /// + /// Output only. The revision ID of the rule. + /// A new revision is created whenever the rule text is changed in any way. + /// Format: v_{10 digits}_{9 digits} + /// Populated in REVISION_METADATA_ONLY view and FULL view. + /// + [Input("revisionId")] + public Input? RevisionId { get; set; } + + /// + /// Rule Id is the ID of the Rule. + /// + [Input("ruleId")] + public Input? RuleId { get; set; } + + /// + /// Resource name of the DataAccessScope bound to this rule. + /// Populated in BASIC view and FULL view. + /// If reference lists are used in the rule, validations will be performed + /// against this scope to ensure that the reference lists are compatible with + /// both the user's and the rule's scopes. + /// The scope should be in the format: + /// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + /// + [Input("scope")] + public Input? Scope { get; set; } + + [Input("severities")] + private InputList? _severities; + + /// + /// (Output) + /// Output only. The severity of a rule's compilation diagnostic. + /// Possible values: + /// SEVERITY_UNSPECIFIED + /// WARNING + /// ERROR + /// + public InputList Severities + { + get => _severities ?? (_severities = new InputList()); + set => _severities = value; + } + + /// + /// The YARA-L content of the rule. + /// Populated in FULL view. + /// + [Input("text")] + public Input? Text { get; set; } + + /// + /// Possible values: + /// RULE_TYPE_UNSPECIFIED + /// SINGLE_EVENT + /// MULTI_EVENT + /// + [Input("type")] + public Input? Type { get; set; } + + public RuleState() + { + } + public static new RuleState Empty => new RuleState(); + } +} diff --git a/sdk/dotnet/Chronicle/RuleDeployment.cs b/sdk/dotnet/Chronicle/RuleDeployment.cs new file mode 100644 index 0000000000..2af0b9939b --- /dev/null +++ b/sdk/dotnet/Chronicle/RuleDeployment.cs @@ -0,0 +1,398 @@ +// *** 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.Chronicle +{ + /// + /// ## Example Usage + /// + /// ## Import + /// + /// RuleDeployment can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` + /// + /// * `{{project}}/{{location}}/{{instance}}/{{rule}}` + /// + /// * `{{location}}/{{instance}}/{{rule}}` + /// + /// When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} + /// ``` + /// + [GcpResourceType("gcp:chronicle/ruleDeployment:RuleDeployment")] + public partial class RuleDeployment : global::Pulumi.CustomResource + { + /// + /// Whether detections resulting from this deployment should be considered + /// alerts. + /// + [Output("alerting")] + public Output Alerting { get; private set; } = null!; + + /// + /// Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + /// + [Output("archiveTime")] + public Output ArchiveTime { get; private set; } = null!; + + /// + /// The archive state of the rule deployment. + /// Cannot be set to true unless enabled is set to false. + /// If set to true, alerting will automatically be set to false. + /// If currently set to true, enabled, alerting, and run_frequency cannot be + /// updated. + /// + [Output("archived")] + public Output Archived { get; private set; } = null!; + + /// + /// Output only. The names of the associated/chained consumer rules. Rules are considered + /// consumers of this rule if their rule text explicitly filters on this rule's ruleid. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + [Output("consumerRules")] + public Output> ConsumerRules { get; private set; } = null!; + + /// + /// Whether the rule is currently deployed continuously against incoming data. + /// + [Output("enabled")] + public Output Enabled { get; private set; } = null!; + + /// + /// The execution state of the rule deployment. + /// Possible values: + /// DEFAULT + /// LIMITED + /// PAUSED + /// + [Output("executionState")] + public Output ExecutionState { get; private set; } = null!; + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Output("instance")] + public Output Instance { get; private set; } = null!; + + /// + /// Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + /// + [Output("lastAlertStatusChangeTime")] + public Output LastAlertStatusChangeTime { get; private set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The resource name of the rule deployment. + /// Note that RuleDeployment is a child of the overall Rule, not any individual + /// revision, so the resource ID segment for the Rule resource must not + /// reference a specific revision. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Output only. The names of the associated/chained producer rules. Rules are considered + /// producers for this rule if this rule explicitly filters on their ruleid. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + [Output("producerRules")] + public Output> ProducerRules { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The Rule ID of the rule. + /// + /// + /// - - - + /// + [Output("rule")] + public Output Rule { get; private set; } = null!; + + /// + /// The run frequency of the rule deployment. + /// Possible values: + /// LIVE + /// HOURLY + /// DAILY + /// + [Output("runFrequency")] + public Output RunFrequency { get; private set; } = null!; + + + /// + /// Create a RuleDeployment 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 RuleDeployment(string name, RuleDeploymentArgs args, CustomResourceOptions? options = null) + : base("gcp:chronicle/ruleDeployment:RuleDeployment", name, args ?? new RuleDeploymentArgs(), MakeResourceOptions(options, "")) + { + } + + private RuleDeployment(string name, Input id, RuleDeploymentState? state = null, CustomResourceOptions? options = null) + : base("gcp:chronicle/ruleDeployment:RuleDeployment", 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 RuleDeployment 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 RuleDeployment Get(string name, Input id, RuleDeploymentState? state = null, CustomResourceOptions? options = null) + { + return new RuleDeployment(name, id, state, options); + } + } + + public sealed class RuleDeploymentArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether detections resulting from this deployment should be considered + /// alerts. + /// + [Input("alerting")] + public Input? Alerting { get; set; } + + /// + /// The archive state of the rule deployment. + /// Cannot be set to true unless enabled is set to false. + /// If set to true, alerting will automatically be set to false. + /// If currently set to true, enabled, alerting, and run_frequency cannot be + /// updated. + /// + [Input("archived")] + public Input? Archived { get; set; } + + /// + /// Whether the rule is currently deployed continuously against incoming data. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Input("instance", required: true)] + public Input Instance { get; set; } = null!; + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// The Rule ID of the rule. + /// + /// + /// - - - + /// + [Input("rule", required: true)] + public Input Rule { get; set; } = null!; + + /// + /// The run frequency of the rule deployment. + /// Possible values: + /// LIVE + /// HOURLY + /// DAILY + /// + [Input("runFrequency")] + public Input? RunFrequency { get; set; } + + public RuleDeploymentArgs() + { + } + public static new RuleDeploymentArgs Empty => new RuleDeploymentArgs(); + } + + public sealed class RuleDeploymentState : global::Pulumi.ResourceArgs + { + /// + /// Whether detections resulting from this deployment should be considered + /// alerts. + /// + [Input("alerting")] + public Input? Alerting { get; set; } + + /// + /// Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + /// + [Input("archiveTime")] + public Input? ArchiveTime { get; set; } + + /// + /// The archive state of the rule deployment. + /// Cannot be set to true unless enabled is set to false. + /// If set to true, alerting will automatically be set to false. + /// If currently set to true, enabled, alerting, and run_frequency cannot be + /// updated. + /// + [Input("archived")] + public Input? Archived { get; set; } + + [Input("consumerRules")] + private InputList? _consumerRules; + + /// + /// Output only. The names of the associated/chained consumer rules. Rules are considered + /// consumers of this rule if their rule text explicitly filters on this rule's ruleid. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + public InputList ConsumerRules + { + get => _consumerRules ?? (_consumerRules = new InputList()); + set => _consumerRules = value; + } + + /// + /// Whether the rule is currently deployed continuously against incoming data. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// The execution state of the rule deployment. + /// Possible values: + /// DEFAULT + /// LIMITED + /// PAUSED + /// + [Input("executionState")] + public Input? ExecutionState { get; set; } + + /// + /// The unique identifier for the Chronicle instance, which is the same as the customer ID. + /// + [Input("instance")] + public Input? Instance { get; set; } + + /// + /// Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + /// + [Input("lastAlertStatusChangeTime")] + public Input? LastAlertStatusChangeTime { get; set; } + + /// + /// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The resource name of the rule deployment. + /// Note that RuleDeployment is a child of the overall Rule, not any individual + /// revision, so the resource ID segment for the Rule resource must not + /// reference a specific revision. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("producerRules")] + private InputList? _producerRules; + + /// + /// Output only. The names of the associated/chained producer rules. Rules are considered + /// producers for this rule if this rule explicitly filters on their ruleid. + /// Format: + /// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + /// + public InputList ProducerRules + { + get => _producerRules ?? (_producerRules = new InputList()); + set => _producerRules = value; + } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// The Rule ID of the rule. + /// + /// + /// - - - + /// + [Input("rule")] + public Input? Rule { get; set; } + + /// + /// The run frequency of the rule deployment. + /// Possible values: + /// LIVE + /// HOURLY + /// DAILY + /// + [Input("runFrequency")] + public Input? RunFrequency { get; set; } + + public RuleDeploymentState() + { + } + public static new RuleDeploymentState Empty => new RuleDeploymentState(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecArgs.cs new file mode 100644 index 0000000000..bf2457cfdf --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Colab.Inputs +{ + + public sealed class RuntimeTemplateDataPersistentDiskSpecArgs : global::Pulumi.ResourceArgs + { + /// + /// The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + /// + [Input("diskSizeGb")] + public Input? DiskSizeGb { get; set; } + + /// + /// The type of the persistent disk. + /// + [Input("diskType")] + public Input? DiskType { get; set; } + + public RuntimeTemplateDataPersistentDiskSpecArgs() + { + } + public static new RuntimeTemplateDataPersistentDiskSpecArgs Empty => new RuntimeTemplateDataPersistentDiskSpecArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecGetArgs.cs new file mode 100644 index 0000000000..608d225de8 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateDataPersistentDiskSpecGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Colab.Inputs +{ + + public sealed class RuntimeTemplateDataPersistentDiskSpecGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + /// + [Input("diskSizeGb")] + public Input? DiskSizeGb { get; set; } + + /// + /// The type of the persistent disk. + /// + [Input("diskType")] + public Input? DiskType { get; set; } + + public RuntimeTemplateDataPersistentDiskSpecGetArgs() + { + } + public static new RuntimeTemplateDataPersistentDiskSpecGetArgs Empty => new RuntimeTemplateDataPersistentDiskSpecGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecArgs.cs new file mode 100644 index 0000000000..10326d317e --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateEncryptionSpecArgs : global::Pulumi.ResourceArgs + { + /// + /// The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + /// + [Input("kmsKeyName")] + public Input? KmsKeyName { get; set; } + + public RuntimeTemplateEncryptionSpecArgs() + { + } + public static new RuntimeTemplateEncryptionSpecArgs Empty => new RuntimeTemplateEncryptionSpecArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecGetArgs.cs new file mode 100644 index 0000000000..a483bc14f3 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEncryptionSpecGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateEncryptionSpecGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + /// + [Input("kmsKeyName")] + public Input? KmsKeyName { get; set; } + + public RuntimeTemplateEncryptionSpecGetArgs() + { + } + public static new RuntimeTemplateEncryptionSpecGetArgs Empty => new RuntimeTemplateEncryptionSpecGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigArgs.cs new file mode 100644 index 0000000000..c58f51ac71 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateEucConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Disable end user credential access for the runtime. + /// + [Input("eucDisabled")] + public Input? EucDisabled { get; set; } + + public RuntimeTemplateEucConfigArgs() + { + } + public static new RuntimeTemplateEucConfigArgs Empty => new RuntimeTemplateEucConfigArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigGetArgs.cs new file mode 100644 index 0000000000..d32da6fdf4 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateEucConfigGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateEucConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Disable end user credential access for the runtime. + /// + [Input("eucDisabled")] + public Input? EucDisabled { get; set; } + + public RuntimeTemplateEucConfigGetArgs() + { + } + public static new RuntimeTemplateEucConfigGetArgs Empty => new RuntimeTemplateEucConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigArgs.cs new file mode 100644 index 0000000000..2ad854d415 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateIdleShutdownConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + /// + [Input("idleTimeout")] + public Input? IdleTimeout { get; set; } + + public RuntimeTemplateIdleShutdownConfigArgs() + { + } + public static new RuntimeTemplateIdleShutdownConfigArgs Empty => new RuntimeTemplateIdleShutdownConfigArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigGetArgs.cs new file mode 100644 index 0000000000..0973be3807 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateIdleShutdownConfigGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateIdleShutdownConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + /// + [Input("idleTimeout")] + public Input? IdleTimeout { get; set; } + + public RuntimeTemplateIdleShutdownConfigGetArgs() + { + } + public static new RuntimeTemplateIdleShutdownConfigGetArgs Empty => new RuntimeTemplateIdleShutdownConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecArgs.cs new file mode 100644 index 0000000000..b1b27f9463 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateMachineSpecArgs : global::Pulumi.ResourceArgs + { + /// + /// The number of accelerators used by the runtime. + /// + [Input("acceleratorCount")] + public Input? AcceleratorCount { get; set; } + + /// + /// The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + /// + [Input("acceleratorType")] + public Input? AcceleratorType { get; set; } + + /// + /// The Compute Engine machine type selected for the runtime. + /// + [Input("machineType")] + public Input? MachineType { get; set; } + + public RuntimeTemplateMachineSpecArgs() + { + } + public static new RuntimeTemplateMachineSpecArgs Empty => new RuntimeTemplateMachineSpecArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecGetArgs.cs new file mode 100644 index 0000000000..40257d760d --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateMachineSpecGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateMachineSpecGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The number of accelerators used by the runtime. + /// + [Input("acceleratorCount")] + public Input? AcceleratorCount { get; set; } + + /// + /// The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + /// + [Input("acceleratorType")] + public Input? AcceleratorType { get; set; } + + /// + /// The Compute Engine machine type selected for the runtime. + /// + [Input("machineType")] + public Input? MachineType { get; set; } + + public RuntimeTemplateMachineSpecGetArgs() + { + } + public static new RuntimeTemplateMachineSpecGetArgs Empty => new RuntimeTemplateMachineSpecGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecArgs.cs new file mode 100644 index 0000000000..d576ebfb85 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateNetworkSpecArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable public internet access for the runtime. + /// + [Input("enableInternetAccess")] + public Input? EnableInternetAccess { get; set; } + + /// + /// The name of the VPC that this runtime is in. + /// + [Input("network")] + public Input? Network { get; set; } + + /// + /// The name of the subnetwork that this runtime is in. + /// + [Input("subnetwork")] + public Input? Subnetwork { get; set; } + + public RuntimeTemplateNetworkSpecArgs() + { + } + public static new RuntimeTemplateNetworkSpecArgs Empty => new RuntimeTemplateNetworkSpecArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecGetArgs.cs new file mode 100644 index 0000000000..eeead948ed --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateNetworkSpecGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateNetworkSpecGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable public internet access for the runtime. + /// + [Input("enableInternetAccess")] + public Input? EnableInternetAccess { get; set; } + + /// + /// The name of the VPC that this runtime is in. + /// + [Input("network")] + public Input? Network { get; set; } + + /// + /// The name of the subnetwork that this runtime is in. + /// + [Input("subnetwork")] + public Input? Subnetwork { get; set; } + + public RuntimeTemplateNetworkSpecGetArgs() + { + } + public static new RuntimeTemplateNetworkSpecGetArgs Empty => new RuntimeTemplateNetworkSpecGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigArgs.cs new file mode 100644 index 0000000000..5831e18f3c --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateShieldedVmConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Enables secure boot for the runtime. + /// + [Input("enableSecureBoot")] + public Input? EnableSecureBoot { get; set; } + + public RuntimeTemplateShieldedVmConfigArgs() + { + } + public static new RuntimeTemplateShieldedVmConfigArgs Empty => new RuntimeTemplateShieldedVmConfigArgs(); + } +} diff --git a/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigGetArgs.cs b/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigGetArgs.cs new file mode 100644 index 0000000000..61050669f1 --- /dev/null +++ b/sdk/dotnet/Colab/Inputs/RuntimeTemplateShieldedVmConfigGetArgs.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.Colab.Inputs +{ + + public sealed class RuntimeTemplateShieldedVmConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Enables secure boot for the runtime. + /// + [Input("enableSecureBoot")] + public Input? EnableSecureBoot { get; set; } + + public RuntimeTemplateShieldedVmConfigGetArgs() + { + } + public static new RuntimeTemplateShieldedVmConfigGetArgs Empty => new RuntimeTemplateShieldedVmConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateDataPersistentDiskSpec.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateDataPersistentDiskSpec.cs new file mode 100644 index 0000000000..82b9f67265 --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateDataPersistentDiskSpec.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.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateDataPersistentDiskSpec + { + /// + /// The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + /// + public readonly string? DiskSizeGb; + /// + /// The type of the persistent disk. + /// + public readonly string? DiskType; + + [OutputConstructor] + private RuntimeTemplateDataPersistentDiskSpec( + string? diskSizeGb, + + string? diskType) + { + DiskSizeGb = diskSizeGb; + DiskType = diskType; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateEncryptionSpec.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateEncryptionSpec.cs new file mode 100644 index 0000000000..33257c2c7a --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateEncryptionSpec.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.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateEncryptionSpec + { + /// + /// The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + /// + public readonly string? KmsKeyName; + + [OutputConstructor] + private RuntimeTemplateEncryptionSpec(string? kmsKeyName) + { + KmsKeyName = kmsKeyName; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateEucConfig.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateEucConfig.cs new file mode 100644 index 0000000000..fadd5dbbb6 --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateEucConfig.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.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateEucConfig + { + /// + /// Disable end user credential access for the runtime. + /// + public readonly bool? EucDisabled; + + [OutputConstructor] + private RuntimeTemplateEucConfig(bool? eucDisabled) + { + EucDisabled = eucDisabled; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateIdleShutdownConfig.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateIdleShutdownConfig.cs new file mode 100644 index 0000000000..5d43b39f31 --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateIdleShutdownConfig.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.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateIdleShutdownConfig + { + /// + /// The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + /// + public readonly string? IdleTimeout; + + [OutputConstructor] + private RuntimeTemplateIdleShutdownConfig(string? idleTimeout) + { + IdleTimeout = idleTimeout; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateMachineSpec.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateMachineSpec.cs new file mode 100644 index 0000000000..82a68f5c99 --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateMachineSpec.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateMachineSpec + { + /// + /// The number of accelerators used by the runtime. + /// + public readonly int? AcceleratorCount; + /// + /// The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + /// + public readonly string? AcceleratorType; + /// + /// The Compute Engine machine type selected for the runtime. + /// + public readonly string? MachineType; + + [OutputConstructor] + private RuntimeTemplateMachineSpec( + int? acceleratorCount, + + string? acceleratorType, + + string? machineType) + { + AcceleratorCount = acceleratorCount; + AcceleratorType = acceleratorType; + MachineType = machineType; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateNetworkSpec.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateNetworkSpec.cs new file mode 100644 index 0000000000..f93161b60f --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateNetworkSpec.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateNetworkSpec + { + /// + /// Enable public internet access for the runtime. + /// + public readonly bool? EnableInternetAccess; + /// + /// The name of the VPC that this runtime is in. + /// + public readonly string? Network; + /// + /// The name of the subnetwork that this runtime is in. + /// + public readonly string? Subnetwork; + + [OutputConstructor] + private RuntimeTemplateNetworkSpec( + bool? enableInternetAccess, + + string? network, + + string? subnetwork) + { + EnableInternetAccess = enableInternetAccess; + Network = network; + Subnetwork = subnetwork; + } + } +} diff --git a/sdk/dotnet/Colab/Outputs/RuntimeTemplateShieldedVmConfig.cs b/sdk/dotnet/Colab/Outputs/RuntimeTemplateShieldedVmConfig.cs new file mode 100644 index 0000000000..78b02b9935 --- /dev/null +++ b/sdk/dotnet/Colab/Outputs/RuntimeTemplateShieldedVmConfig.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.Colab.Outputs +{ + + [OutputType] + public sealed class RuntimeTemplateShieldedVmConfig + { + /// + /// Enables secure boot for the runtime. + /// + public readonly bool? EnableSecureBoot; + + [OutputConstructor] + private RuntimeTemplateShieldedVmConfig(bool? enableSecureBoot) + { + EnableSecureBoot = enableSecureBoot; + } + } +} diff --git a/sdk/dotnet/Colab/README.md b/sdk/dotnet/Colab/README.md new file mode 100644 index 0000000000..061b113996 --- /dev/null +++ b/sdk/dotnet/Colab/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Google Cloud Platform resources. diff --git a/sdk/dotnet/Colab/RuntimeTemplate.cs b/sdk/dotnet/Colab/RuntimeTemplate.cs new file mode 100644 index 0000000000..9a8990c409 --- /dev/null +++ b/sdk/dotnet/Colab/RuntimeTemplate.cs @@ -0,0 +1,607 @@ +// *** 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.Colab +{ + /// + /// 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, + /// as well as common settings such as the network and whether public internet access is enabled. When you create + /// a runtime, its VM is created according to the specifications of a runtime template.' + /// + /// To get more information about RuntimeTemplate, see: + /// + /// * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) + /// * How-to Guides + /// * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) + /// + /// ## Example Usage + /// + /// ### Colab Runtime Template Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var runtime_template = new Gcp.Colab.RuntimeTemplate("runtime-template", new() + /// { + /// Name = "colab-runtime-template", + /// DisplayName = "Runtime template basic", + /// Location = "us-central1", + /// MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs + /// { + /// MachineType = "e2-standard-4", + /// }, + /// NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs + /// { + /// EnableInternetAccess = true, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Colab Runtime Template No Name + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var runtime_template = new Gcp.Colab.RuntimeTemplate("runtime-template", new() + /// { + /// DisplayName = "Runtime template no name", + /// Location = "us-central1", + /// MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs + /// { + /// MachineType = "e2-standard-4", + /// }, + /// NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs + /// { + /// EnableInternetAccess = true, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Colab Runtime Template Full + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var myNetwork = new Gcp.Compute.Network("my_network", new() + /// { + /// Name = "colab-test-default", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var mySubnetwork = new Gcp.Compute.Subnetwork("my_subnetwork", new() + /// { + /// Name = "colab-test-default", + /// Network = myNetwork.Id, + /// Region = "us-central1", + /// IpCidrRange = "10.0.1.0/24", + /// }); + /// + /// var runtime_template = new Gcp.Colab.RuntimeTemplate("runtime-template", new() + /// { + /// Name = "colab-runtime-template", + /// DisplayName = "Runtime template full", + /// Location = "us-central1", + /// Description = "Full runtime template", + /// MachineSpec = new Gcp.Colab.Inputs.RuntimeTemplateMachineSpecArgs + /// { + /// MachineType = "n1-standard-2", + /// AcceleratorType = "NVIDIA_TESLA_T4", + /// AcceleratorCount = 1, + /// }, + /// DataPersistentDiskSpec = new Gcp.Colab.Inputs.RuntimeTemplateDataPersistentDiskSpecArgs + /// { + /// DiskType = "pd-standard", + /// DiskSizeGb = "200", + /// }, + /// NetworkSpec = new Gcp.Colab.Inputs.RuntimeTemplateNetworkSpecArgs + /// { + /// EnableInternetAccess = true, + /// Network = myNetwork.Id, + /// Subnetwork = mySubnetwork.Id, + /// }, + /// Labels = + /// { + /// { "k", "val" }, + /// }, + /// IdleShutdownConfig = new Gcp.Colab.Inputs.RuntimeTemplateIdleShutdownConfigArgs + /// { + /// IdleTimeout = "3600s", + /// }, + /// EucConfig = new Gcp.Colab.Inputs.RuntimeTemplateEucConfigArgs + /// { + /// EucDisabled = true, + /// }, + /// ShieldedVmConfig = new Gcp.Colab.Inputs.RuntimeTemplateShieldedVmConfigArgs + /// { + /// EnableSecureBoot = true, + /// }, + /// NetworkTags = new[] + /// { + /// "abc", + /// "def", + /// }, + /// EncryptionSpec = new Gcp.Colab.Inputs.RuntimeTemplateEncryptionSpecArgs + /// { + /// KmsKeyName = "my-crypto-key", + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// RuntimeTemplate can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` + /// + /// * `{{project}}/{{location}}/{{name}}` + /// + /// * `{{location}}/{{name}}` + /// + /// When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:colab/runtimeTemplate:RuntimeTemplate")] + public partial class RuntimeTemplate : global::Pulumi.CustomResource + { + /// + /// The configuration for the data disk of the runtime. + /// Structure is documented below. + /// + [Output("dataPersistentDiskSpec")] + public Output DataPersistentDiskSpec { get; private set; } = null!; + + /// + /// The description of the Runtime Template. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Required. The display name of the Runtime Template. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// Customer-managed encryption key spec for the notebook runtime. + /// Structure is documented below. + /// + [Output("encryptionSpec")] + public Output EncryptionSpec { get; private set; } = null!; + + /// + /// EUC configuration of the NotebookRuntimeTemplate. + /// Structure is documented below. + /// + [Output("eucConfig")] + public Output EucConfig { get; private set; } = null!; + + /// + /// Notebook Idle Shutdown configuration for the runtime. + /// Structure is documented below. + /// + [Output("idleShutdownConfig")] + public Output IdleShutdownConfig { get; private set; } = null!; + + /// + /// Labels to identify and group the runtime template. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The location for the resource: https://cloud.google.com/colab/docs/locations + /// + /// + /// - - - + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// 'The machine configuration of the runtime.' + /// Structure is documented below. + /// + [Output("machineSpec")] + public Output MachineSpec { get; private set; } = null!; + + /// + /// The resource name of the Runtime Template + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The network configuration for the runtime. + /// Structure is documented below. + /// + [Output("networkSpec")] + public Output NetworkSpec { get; private set; } = null!; + + /// + /// Applies the given Compute Engine tags to the runtime. + /// + [Output("networkTags")] + public Output> NetworkTags { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// Runtime Shielded VM spec. + /// Structure is documented below. + /// + [Output("shieldedVmConfig")] + public Output ShieldedVmConfig { get; private set; } = null!; + + + /// + /// Create a RuntimeTemplate 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 RuntimeTemplate(string name, RuntimeTemplateArgs args, CustomResourceOptions? options = null) + : base("gcp:colab/runtimeTemplate:RuntimeTemplate", name, args ?? new RuntimeTemplateArgs(), MakeResourceOptions(options, "")) + { + } + + private RuntimeTemplate(string name, Input id, RuntimeTemplateState? state = null, CustomResourceOptions? options = null) + : base("gcp:colab/runtimeTemplate:RuntimeTemplate", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing RuntimeTemplate 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 RuntimeTemplate Get(string name, Input id, RuntimeTemplateState? state = null, CustomResourceOptions? options = null) + { + return new RuntimeTemplate(name, id, state, options); + } + } + + public sealed class RuntimeTemplateArgs : global::Pulumi.ResourceArgs + { + /// + /// The configuration for the data disk of the runtime. + /// Structure is documented below. + /// + [Input("dataPersistentDiskSpec")] + public Input? DataPersistentDiskSpec { get; set; } + + /// + /// The description of the Runtime Template. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Required. The display name of the Runtime Template. + /// + [Input("displayName", required: true)] + public Input DisplayName { get; set; } = null!; + + /// + /// Customer-managed encryption key spec for the notebook runtime. + /// Structure is documented below. + /// + [Input("encryptionSpec")] + public Input? EncryptionSpec { get; set; } + + /// + /// EUC configuration of the NotebookRuntimeTemplate. + /// Structure is documented below. + /// + [Input("eucConfig")] + public Input? EucConfig { get; set; } + + /// + /// Notebook Idle Shutdown configuration for the runtime. + /// Structure is documented below. + /// + [Input("idleShutdownConfig")] + public Input? IdleShutdownConfig { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Labels to identify and group the runtime template. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location for the resource: https://cloud.google.com/colab/docs/locations + /// + /// + /// - - - + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// 'The machine configuration of the runtime.' + /// Structure is documented below. + /// + [Input("machineSpec")] + public Input? MachineSpec { get; set; } + + /// + /// The resource name of the Runtime Template + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The network configuration for the runtime. + /// Structure is documented below. + /// + [Input("networkSpec")] + public Input? NetworkSpec { get; set; } + + [Input("networkTags")] + private InputList? _networkTags; + + /// + /// Applies the given Compute Engine tags to the runtime. + /// + public InputList NetworkTags + { + get => _networkTags ?? (_networkTags = new InputList()); + set => _networkTags = value; + } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Runtime Shielded VM spec. + /// Structure is documented below. + /// + [Input("shieldedVmConfig")] + public Input? ShieldedVmConfig { get; set; } + + public RuntimeTemplateArgs() + { + } + public static new RuntimeTemplateArgs Empty => new RuntimeTemplateArgs(); + } + + public sealed class RuntimeTemplateState : global::Pulumi.ResourceArgs + { + /// + /// The configuration for the data disk of the runtime. + /// Structure is documented below. + /// + [Input("dataPersistentDiskSpec")] + public Input? DataPersistentDiskSpec { get; set; } + + /// + /// The description of the Runtime Template. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Required. The display name of the Runtime Template. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// Customer-managed encryption key spec for the notebook runtime. + /// Structure is documented below. + /// + [Input("encryptionSpec")] + public Input? EncryptionSpec { get; set; } + + /// + /// EUC configuration of the NotebookRuntimeTemplate. + /// Structure is documented below. + /// + [Input("eucConfig")] + public Input? EucConfig { get; set; } + + /// + /// Notebook Idle Shutdown configuration for the runtime. + /// Structure is documented below. + /// + [Input("idleShutdownConfig")] + public Input? IdleShutdownConfig { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Labels to identify and group the runtime template. + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location for the resource: https://cloud.google.com/colab/docs/locations + /// + /// + /// - - - + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// 'The machine configuration of the runtime.' + /// Structure is documented below. + /// + [Input("machineSpec")] + public Input? MachineSpec { get; set; } + + /// + /// The resource name of the Runtime Template + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The network configuration for the runtime. + /// Structure is documented below. + /// + [Input("networkSpec")] + public Input? NetworkSpec { get; set; } + + [Input("networkTags")] + private InputList? _networkTags; + + /// + /// Applies the given Compute Engine tags to the runtime. + /// + public InputList NetworkTags + { + get => _networkTags ?? (_networkTags = new InputList()); + set => _networkTags = value; + } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// Runtime Shielded VM spec. + /// Structure is documented below. + /// + [Input("shieldedVmConfig")] + public Input? ShieldedVmConfig { get; set; } + + public RuntimeTemplateState() + { + } + public static new RuntimeTemplateState Empty => new RuntimeTemplateState(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs index 838950b4e2..3e0a5cb270 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs @@ -118,7 +118,7 @@ public InputList Ipv6Access public Input? SecurityPolicy { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs index f739100a28..75f93fd8cc 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs @@ -118,7 +118,7 @@ public InputList Ipv6Acc public Input? SecurityPolicy { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs index e79017e94b..73a849b2c6 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs @@ -116,7 +116,7 @@ public InputList Ip public Input? QueueCount { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs index a32b219d43..35db7266a7 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs @@ -116,7 +116,7 @@ public InputList public Input? QueueCount { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs index a0498eaf7e..004afcdfe8 100644 --- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs @@ -100,7 +100,7 @@ public InputList? QueueCount { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs index fc6a575474..03b532698a 100644 --- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs @@ -100,7 +100,7 @@ public InputList? QueueCount { get; set; } /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/InterconnectAttachment.cs b/sdk/dotnet/Compute/InterconnectAttachment.cs index a2273b96f5..66669fc253 100644 --- a/sdk/dotnet/Compute/InterconnectAttachment.cs +++ b/sdk/dotnet/Compute/InterconnectAttachment.cs @@ -151,7 +151,7 @@ public partial class InterconnectAttachment : global::Pulumi.CustomResource /// For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. /// Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, /// Defaults to BPS_10G - /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. /// [Output("bandwidth")] public Output Bandwidth { get; private set; } = null!; @@ -446,7 +446,7 @@ public sealed class InterconnectAttachmentArgs : global::Pulumi.ResourceArgs /// For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. /// Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, /// Defaults to BPS_10G - /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. /// [Input("bandwidth")] public Input? Bandwidth { get; set; } @@ -638,7 +638,7 @@ public sealed class InterconnectAttachmentState : global::Pulumi.ResourceArgs /// For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. /// Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, /// Defaults to BPS_10G - /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + /// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. /// [Input("bandwidth")] public Input? Bandwidth { get; set; } diff --git a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs index e5d460f7e2..8d910aff8f 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs @@ -75,7 +75,7 @@ public sealed class InstanceNetworkInterface /// public readonly string? SecurityPolicy; /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// public readonly string? StackType; /// diff --git a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs index bf59f8c096..b36261f02e 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs @@ -75,7 +75,7 @@ public sealed class InstanceTemplateNetworkInterface /// public readonly int? QueueCount; /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// public readonly string? StackType; /// diff --git a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs index 283ff37d00..5d19ae3891 100644 --- a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs +++ b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs @@ -62,7 +62,7 @@ public sealed class RegionInstanceTemplateNetworkInterface /// public readonly int? QueueCount; /// - /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + /// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. /// public readonly string? StackType; /// diff --git a/sdk/dotnet/Compute/Route.cs b/sdk/dotnet/Compute/Route.cs index 9497ba433e..4d2337f351 100644 --- a/sdk/dotnet/Compute/Route.cs +++ b/sdk/dotnet/Compute/Route.cs @@ -349,8 +349,7 @@ public partial class Route : global::Pulumi.CustomResource public Output NextHopInstanceZone { get; private set; } = null!; /// - /// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - /// distance, and available bandwidth between regions. + /// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. /// [Output("nextHopInterRegionCost")] public Output NextHopInterRegionCost { get; private set; } = null!; @@ -374,8 +373,7 @@ public partial class Route : global::Pulumi.CustomResource public Output NextHopNetwork { get; private set; } = null!; /// - /// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - /// INCOMPLETE. + /// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. /// [Output("nextHopOrigin")] public Output NextHopOrigin { get; private set; } = null!; @@ -681,8 +679,7 @@ public sealed class RouteState : global::Pulumi.ResourceArgs public Input? NextHopInstanceZone { get; set; } /// - /// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - /// distance, and available bandwidth between regions. + /// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. /// [Input("nextHopInterRegionCost")] public Input? NextHopInterRegionCost { get; set; } @@ -706,8 +703,7 @@ public sealed class RouteState : global::Pulumi.ResourceArgs public Input? NextHopNetwork { get; set; } /// - /// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - /// INCOMPLETE. + /// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. /// [Input("nextHopOrigin")] public Input? NextHopOrigin { get; set; } diff --git a/sdk/dotnet/Compute/Subnetwork.cs b/sdk/dotnet/Compute/Subnetwork.cs index f9ffd1619c..8ed44ddeaa 100644 --- a/sdk/dotnet/Compute/Subnetwork.cs +++ b/sdk/dotnet/Compute/Subnetwork.cs @@ -571,7 +571,7 @@ public partial class Subnetwork : global::Pulumi.CustomResource /// /// The stack type for this subnet to identify whether the IPv6 feature is enabled or not. /// If not specified IPV4_ONLY will be used. - /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. /// [Output("stackType")] public Output StackType { get; private set; } = null!; @@ -788,7 +788,7 @@ public InputList SecondaryIpRanges /// /// The stack type for this subnet to identify whether the IPv6 feature is enabled or not. /// If not specified IPV4_ONLY will be used. - /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. /// [Input("stackType")] public Input? StackType { get; set; } @@ -998,7 +998,7 @@ public InputList SecondaryIpRanges /// /// The stack type for this subnet to identify whether the IPv6 feature is enabled or not. /// If not specified IPV4_ONLY will be used. - /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + /// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. /// [Input("stackType")] public Input? StackType { get; set; } diff --git a/sdk/dotnet/Compute/TargetInstance.cs b/sdk/dotnet/Compute/TargetInstance.cs index d5620b3dee..72222a3b6b 100644 --- a/sdk/dotnet/Compute/TargetInstance.cs +++ b/sdk/dotnet/Compute/TargetInstance.cs @@ -184,7 +184,7 @@ namespace Pulumi.Gcp.Compute /// var policyddosprotection = new Gcp.Compute.RegionSecurityPolicy("policyddosprotection", new() /// { /// Region = "southamerica-west1", - /// Name = "tf-test-policyddos_85794", + /// Name = "tf-test-policyddos_21197", /// Description = "ddos protection security policy to set target instance", /// Type = "CLOUD_ARMOR_NETWORK", /// DdosProtectionConfig = new Gcp.Compute.Inputs.RegionSecurityPolicyDdosProtectionConfigArgs @@ -196,7 +196,7 @@ namespace Pulumi.Gcp.Compute /// var edgeSecService = new Gcp.Compute.NetworkEdgeSecurityService("edge_sec_service", new() /// { /// Region = "southamerica-west1", - /// Name = "tf-test-edgesec_21197", + /// Name = "tf-test-edgesec_52865", /// SecurityPolicy = policyddosprotection.SelfLink, /// }); /// diff --git a/sdk/dotnet/Compute/URLMap.cs b/sdk/dotnet/Compute/URLMap.cs index d18771c297..fefa26e56d 100644 --- a/sdk/dotnet/Compute/URLMap.cs +++ b/sdk/dotnet/Compute/URLMap.cs @@ -16,6 +16,8 @@ namespace Pulumi.Gcp.Compute /// To get more information about UrlMap, see: /// /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) + /// * How-to Guides + /// * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) /// /// ## Example Usage /// diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index b3b1b84478..c83e41fbb2 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -361,6 +361,13 @@ public static string? Cloudfunctions2CustomEndpoint set => _cloudfunctions2CustomEndpoint.Set(value); } + private static readonly __Value _colabCustomEndpoint = new __Value(() => __config.Get("colabCustomEndpoint")); + public static string? ColabCustomEndpoint + { + get => _colabCustomEndpoint.Get(); + set => _colabCustomEndpoint.Set(value); + } + private static readonly __Value _composerCustomEndpoint = new __Value(() => __config.Get("composerCustomEndpoint")); public static string? ComposerCustomEndpoint { @@ -956,6 +963,20 @@ public static string? ParallelstoreCustomEndpoint set => _parallelstoreCustomEndpoint.Set(value); } + private static readonly __Value _parameterManagerCustomEndpoint = new __Value(() => __config.Get("parameterManagerCustomEndpoint")); + public static string? ParameterManagerCustomEndpoint + { + get => _parameterManagerCustomEndpoint.Get(); + set => _parameterManagerCustomEndpoint.Set(value); + } + + private static readonly __Value _parameterManagerRegionalCustomEndpoint = new __Value(() => __config.Get("parameterManagerRegionalCustomEndpoint")); + public static string? ParameterManagerRegionalCustomEndpoint + { + get => _parameterManagerRegionalCustomEndpoint.Get(); + set => _parameterManagerRegionalCustomEndpoint.Set(value); + } + private static readonly __Value _privatecaCustomEndpoint = new __Value(() => __config.Get("privatecaCustomEndpoint")); public static string? PrivatecaCustomEndpoint { diff --git a/sdk/dotnet/DataPlex/EntryType.cs b/sdk/dotnet/DataPlex/EntryType.cs index f8e9323a78..8a8fc17d98 100644 --- a/sdk/dotnet/DataPlex/EntryType.cs +++ b/sdk/dotnet/DataPlex/EntryType.cs @@ -45,7 +45,7 @@ namespace Pulumi.Gcp.DataPlex /// { /// var testEntryTypeFull = new Gcp.DataPlex.AspectType("test_entry_type_full", new() /// { - /// AspectTypeId = "tf-test-aspect-type_22811", + /// AspectTypeId = "tf-test-aspect-type_91042", /// Location = "us-central1", /// Project = "my-project-name", /// MetadataTemplate = @"{ diff --git a/sdk/dotnet/DataPlex/Task.cs b/sdk/dotnet/DataPlex/Task.cs index 6e8d01d784..7ff1567fef 100644 --- a/sdk/dotnet/DataPlex/Task.cs +++ b/sdk/dotnet/DataPlex/Task.cs @@ -34,14 +34,14 @@ namespace Pulumi.Gcp.DataPlex /// /// var example = new Gcp.DataPlex.Lake("example", new() /// { - /// Name = "tf-test-lake_91042", + /// Name = "tf-test-lake_72490", /// Location = "us-central1", /// Project = "my-project-name", /// }); /// /// var exampleTask = new Gcp.DataPlex.Task("example", new() /// { - /// TaskId = "tf-test-task_72490", + /// TaskId = "tf-test-task_89605", /// Location = "us-central1", /// Lake = example.Name, /// Description = "Test Task Basic", @@ -87,7 +87,7 @@ namespace Pulumi.Gcp.DataPlex /// // VPC network /// var @default = new Gcp.Compute.Network("default", new() /// { - /// Name = "tf-test-workstation-cluster_89605", + /// Name = "tf-test-workstation-cluster_56730", /// AutoCreateSubnetworks = true, /// }); /// @@ -95,14 +95,14 @@ namespace Pulumi.Gcp.DataPlex /// /// var exampleSpark = new Gcp.DataPlex.Lake("example_spark", new() /// { - /// Name = "tf-test-lake_56730", + /// Name = "tf-test-lake_95154", /// Location = "us-central1", /// Project = "my-project-name", /// }); /// /// var exampleSparkTask = new Gcp.DataPlex.Task("example_spark", new() /// { - /// TaskId = "tf-test-task_95154", + /// TaskId = "tf-test-task_64336", /// Location = "us-central1", /// Lake = exampleSpark.Name, /// TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs @@ -182,7 +182,7 @@ namespace Pulumi.Gcp.DataPlex /// // VPC network /// var @default = new Gcp.Compute.Network("default", new() /// { - /// Name = "tf-test-workstation-cluster_64336", + /// Name = "tf-test-workstation-cluster_34962", /// AutoCreateSubnetworks = true, /// }); /// @@ -190,14 +190,14 @@ namespace Pulumi.Gcp.DataPlex /// /// var exampleNotebook = new Gcp.DataPlex.Lake("example_notebook", new() /// { - /// Name = "tf-test-lake_34962", + /// Name = "tf-test-lake_74000", /// Location = "us-central1", /// Project = "my-project-name", /// }); /// /// var exampleNotebookTask = new Gcp.DataPlex.Task("example_notebook", new() /// { - /// TaskId = "tf-test-task_74000", + /// TaskId = "tf-test-task_75125", /// Location = "us-central1", /// Lake = exampleNotebook.Name, /// TriggerSpec = new Gcp.DataPlex.Inputs.TaskTriggerSpecArgs diff --git a/sdk/dotnet/DatabaseMigrationService/ConnectionProfile.cs b/sdk/dotnet/DatabaseMigrationService/ConnectionProfile.cs index 8a8cc8d66b..e625e9fa6c 100644 --- a/sdk/dotnet/DatabaseMigrationService/ConnectionProfile.cs +++ b/sdk/dotnet/DatabaseMigrationService/ConnectionProfile.cs @@ -303,13 +303,13 @@ namespace Pulumi.Gcp.DatabaseMigrationService /// }, /// Alloydb = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbArgs /// { - /// ClusterId = "tf-test-dbmsalloycluster_52865", + /// ClusterId = "tf-test-dbmsalloycluster_85840", /// Settings = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsArgs /// { /// InitialUser = new Gcp.DatabaseMigrationService.Inputs.ConnectionProfileAlloydbSettingsInitialUserArgs /// { - /// User = "alloyuser_85840", - /// Password = "alloypass_60302", + /// User = "alloyuser_60302", + /// Password = "alloypass_22811", /// }, /// VpcNetwork = @default.Id, /// Labels = diff --git a/sdk/dotnet/Dataproc/Batch.cs b/sdk/dotnet/Dataproc/Batch.cs index 4bf9423368..2066f09486 100644 --- a/sdk/dotnet/Dataproc/Batch.cs +++ b/sdk/dotnet/Dataproc/Batch.cs @@ -33,7 +33,7 @@ namespace Pulumi.Gcp.Dataproc /// { /// var exampleBatchSpark = new Gcp.Dataproc.Batch("example_batch_spark", new() /// { - /// BatchId = "tf-test-batch_75125", + /// BatchId = "tf-test-batch_88722", /// Location = "us-central1", /// Labels = /// { @@ -229,7 +229,7 @@ namespace Pulumi.Gcp.Dataproc /// { /// var exampleBatchSparsql = new Gcp.Dataproc.Batch("example_batch_sparsql", new() /// { - /// BatchId = "tf-test-batch_88722", + /// BatchId = "tf-test-batch_39249", /// Location = "us-central1", /// RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs /// { @@ -274,7 +274,7 @@ namespace Pulumi.Gcp.Dataproc /// { /// var exampleBatchPyspark = new Gcp.Dataproc.Batch("example_batch_pyspark", new() /// { - /// BatchId = "tf-test-batch_39249", + /// BatchId = "tf-test-batch_74391", /// Location = "us-central1", /// RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs /// { @@ -333,7 +333,7 @@ namespace Pulumi.Gcp.Dataproc /// { /// var exampleBatchSparkr = new Gcp.Dataproc.Batch("example_batch_sparkr", new() /// { - /// BatchId = "tf-test-batch_74391", + /// BatchId = "tf-test-batch_16511", /// Location = "us-central1", /// Labels = /// { @@ -383,7 +383,7 @@ namespace Pulumi.Gcp.Dataproc /// { /// var exampleBatchAutotuning = new Gcp.Dataproc.Batch("example_batch_autotuning", new() /// { - /// BatchId = "tf-test-batch_16511", + /// BatchId = "tf-test-batch_8493", /// Location = "us-central1", /// Labels = /// { diff --git a/sdk/dotnet/DiscoveryEngine/DataStore.cs b/sdk/dotnet/DiscoveryEngine/DataStore.cs index 6f0f1a15dc..44ebf1836f 100644 --- a/sdk/dotnet/DiscoveryEngine/DataStore.cs +++ b/sdk/dotnet/DiscoveryEngine/DataStore.cs @@ -93,6 +93,38 @@ namespace Pulumi.Gcp.DiscoveryEngine /// /// }); /// ``` + /// ### Discoveryengine Datastore Advanced Site Search Config + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var advancedSiteSearchConfig = new Gcp.DiscoveryEngine.DataStore("advanced_site_search_config", new() + /// { + /// Location = "global", + /// DataStoreId = "data-store-id", + /// DisplayName = "tf-test-advanced-site-search-config-datastore", + /// IndustryVertical = "GENERIC", + /// ContentConfig = "PUBLIC_WEBSITE", + /// SolutionTypes = new[] + /// { + /// "SOLUTION_TYPE_CHAT", + /// }, + /// CreateAdvancedSiteSearch = true, + /// SkipDefaultSchemaCreation = false, + /// AdvancedSiteSearchConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreAdvancedSiteSearchConfigArgs + /// { + /// DisableInitialIndex = true, + /// DisableAutomaticRefresh = true, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// @@ -121,6 +153,13 @@ namespace Pulumi.Gcp.DiscoveryEngine [GcpResourceType("gcp:discoveryengine/dataStore:DataStore")] public partial class DataStore : global::Pulumi.CustomResource { + /// + /// Configuration data for advance site search. + /// Structure is documented below. + /// + [Output("advancedSiteSearchConfig")] + public Output AdvancedSiteSearchConfig { get; private set; } = null!; + /// /// The content config of the data store. /// Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -266,6 +305,13 @@ public static DataStore Get(string name, Input id, DataStoreState? state public sealed class DataStoreArgs : global::Pulumi.ResourceArgs { + /// + /// Configuration data for advance site search. + /// Structure is documented below. + /// + [Input("advancedSiteSearchConfig")] + public Input? AdvancedSiteSearchConfig { get; set; } + /// /// The content config of the data store. /// Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -358,6 +404,13 @@ public DataStoreArgs() public sealed class DataStoreState : global::Pulumi.ResourceArgs { + /// + /// Configuration data for advance site search. + /// Structure is documented below. + /// + [Input("advancedSiteSearchConfig")] + public Input? AdvancedSiteSearchConfig { get; set; } + /// /// The content config of the data store. /// Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. diff --git a/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigArgs.cs b/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigArgs.cs new file mode 100644 index 0000000000..f7fda8ef81 --- /dev/null +++ b/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DiscoveryEngine.Inputs +{ + + public sealed class DataStoreAdvancedSiteSearchConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// If set true, automatic refresh is disabled for the DataStore. + /// + [Input("disableAutomaticRefresh")] + public Input? DisableAutomaticRefresh { get; set; } + + /// + /// If set true, initial indexing is disabled for the DataStore. + /// + [Input("disableInitialIndex")] + public Input? DisableInitialIndex { get; set; } + + public DataStoreAdvancedSiteSearchConfigArgs() + { + } + public static new DataStoreAdvancedSiteSearchConfigArgs Empty => new DataStoreAdvancedSiteSearchConfigArgs(); + } +} diff --git a/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigGetArgs.cs b/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigGetArgs.cs new file mode 100644 index 0000000000..f024af954a --- /dev/null +++ b/sdk/dotnet/DiscoveryEngine/Inputs/DataStoreAdvancedSiteSearchConfigGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DiscoveryEngine.Inputs +{ + + public sealed class DataStoreAdvancedSiteSearchConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// If set true, automatic refresh is disabled for the DataStore. + /// + [Input("disableAutomaticRefresh")] + public Input? DisableAutomaticRefresh { get; set; } + + /// + /// If set true, initial indexing is disabled for the DataStore. + /// + [Input("disableInitialIndex")] + public Input? DisableInitialIndex { get; set; } + + public DataStoreAdvancedSiteSearchConfigGetArgs() + { + } + public static new DataStoreAdvancedSiteSearchConfigGetArgs Empty => new DataStoreAdvancedSiteSearchConfigGetArgs(); + } +} diff --git a/sdk/dotnet/DiscoveryEngine/Outputs/DataStoreAdvancedSiteSearchConfig.cs b/sdk/dotnet/DiscoveryEngine/Outputs/DataStoreAdvancedSiteSearchConfig.cs new file mode 100644 index 0000000000..7ff7b2bdeb --- /dev/null +++ b/sdk/dotnet/DiscoveryEngine/Outputs/DataStoreAdvancedSiteSearchConfig.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.DiscoveryEngine.Outputs +{ + + [OutputType] + public sealed class DataStoreAdvancedSiteSearchConfig + { + /// + /// If set true, automatic refresh is disabled for the DataStore. + /// + public readonly bool? DisableAutomaticRefresh; + /// + /// If set true, initial indexing is disabled for the DataStore. + /// + public readonly bool? DisableInitialIndex; + + [OutputConstructor] + private DataStoreAdvancedSiteSearchConfig( + bool? disableAutomaticRefresh, + + bool? disableInitialIndex) + { + DisableAutomaticRefresh = disableAutomaticRefresh; + DisableInitialIndex = disableInitialIndex; + } + } +} diff --git a/sdk/dotnet/EdgeNetwork/InterconnectAttachment.cs b/sdk/dotnet/EdgeNetwork/InterconnectAttachment.cs new file mode 100644 index 0000000000..562c8eb339 --- /dev/null +++ b/sdk/dotnet/EdgeNetwork/InterconnectAttachment.cs @@ -0,0 +1,472 @@ +// *** 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.EdgeNetwork +{ + /// + /// A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. + /// + /// To get more information about InterconnectAttachment, see: + /// + /// * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) + /// * How-to Guides + /// * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) + /// + /// ## Example Usage + /// + /// ### Edgenetwork Interconnect Attachment + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var exampleNetwork = new Gcp.EdgeNetwork.Network("example_network", new() + /// { + /// NetworkId = "example-network", + /// Location = "us-west1", + /// Zone = "", + /// Description = "Example network.", + /// Mtu = 9000, + /// }); + /// + /// var exampleInterconnectAttachment = new Gcp.EdgeNetwork.InterconnectAttachment("example_interconnect_attachment", new() + /// { + /// InterconnectAttachmentId = "example-interconnect-attachment", + /// Location = "us-west1", + /// Zone = "", + /// Description = "Example interconnect attachment.", + /// Network = exampleNetwork.Id, + /// Interconnect = "11111111-2222-3333-4444-555555555555", + /// VlanId = 55, + /// Mtu = 9000, + /// Labels = + /// { + /// { "environment", "dev" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// InterconnectAttachment can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` + /// + /// * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` + /// + /// * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` + /// + /// * `{{location}}/{{interconnect_attachment_id}}` + /// + /// * `{{name}}` + /// + /// When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} + /// ``` + /// + [GcpResourceType("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment")] + public partial class InterconnectAttachment : global::Pulumi.CustomResource + { + /// + /// The time when the resource was created. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + /// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// The ID of the underlying interconnect that this attachment's traffic will traverse through. + /// + [Output("interconnect")] + public Output Interconnect { get; private set; } = null!; + + /// + /// A unique ID that identifies this interconnect attachment. + /// + /// + /// - - - + /// + [Output("interconnectAttachmentId")] + public Output InterconnectAttachmentId { get; private set; } = null!; + + /// + /// Labels associated with this resource. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + /// + [Output("mtu")] + public Output Mtu { get; private set; } = null!; + + /// + /// The canonical name of this resource, with format + /// `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The ID of the network to which this interconnect attachment belongs. + /// Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + /// + [Output("network")] + public Output Network { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// The time when the resource was last updated. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + /// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + /// + /// VLAN ID provided by user. Must be site-wise unique. + /// + [Output("vlanId")] + public Output VlanId { get; private set; } = null!; + + /// + /// The name of the target Distributed Cloud Edge zone. + /// + [Output("zone")] + public Output Zone { get; private set; } = null!; + + + /// + /// Create a InterconnectAttachment 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 InterconnectAttachment(string name, InterconnectAttachmentArgs args, CustomResourceOptions? options = null) + : base("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, args ?? new InterconnectAttachmentArgs(), MakeResourceOptions(options, "")) + { + } + + private InterconnectAttachment(string name, Input id, InterconnectAttachmentState? state = null, CustomResourceOptions? options = null) + : base("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing InterconnectAttachment 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 InterconnectAttachment Get(string name, Input id, InterconnectAttachmentState? state = null, CustomResourceOptions? options = null) + { + return new InterconnectAttachment(name, id, state, options); + } + } + + public sealed class InterconnectAttachmentArgs : global::Pulumi.ResourceArgs + { + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// The ID of the underlying interconnect that this attachment's traffic will traverse through. + /// + [Input("interconnect", required: true)] + public Input Interconnect { get; set; } = null!; + + /// + /// A unique ID that identifies this interconnect attachment. + /// + /// + /// - - - + /// + [Input("interconnectAttachmentId", required: true)] + public Input InterconnectAttachmentId { get; set; } = null!; + + [Input("labels")] + private InputMap? _labels; + + /// + /// Labels associated with this resource. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + /// + [Input("mtu")] + public Input? Mtu { get; set; } + + /// + /// The ID of the network to which this interconnect attachment belongs. + /// Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + /// + [Input("network", required: true)] + public Input Network { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// VLAN ID provided by user. Must be site-wise unique. + /// + [Input("vlanId", required: true)] + public Input VlanId { get; set; } = null!; + + /// + /// The name of the target Distributed Cloud Edge zone. + /// + [Input("zone", required: true)] + public Input Zone { get; set; } = null!; + + public InterconnectAttachmentArgs() + { + } + public static new InterconnectAttachmentArgs Empty => new InterconnectAttachmentArgs(); + } + + public sealed class InterconnectAttachmentState : global::Pulumi.ResourceArgs + { + /// + /// The time when the resource was created. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + /// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// A free-text description of the resource. Max length 1024 characters. + /// + [Input("description")] + public Input? Description { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The ID of the underlying interconnect that this attachment's traffic will traverse through. + /// + [Input("interconnect")] + public Input? Interconnect { get; set; } + + /// + /// A unique ID that identifies this interconnect attachment. + /// + /// + /// - - - + /// + [Input("interconnectAttachmentId")] + public Input? InterconnectAttachmentId { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Labels associated with this resource. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + /// + [Input("mtu")] + public Input? Mtu { get; set; } + + /// + /// The canonical name of this resource, with format + /// `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The ID of the network to which this interconnect attachment belongs. + /// Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + /// + [Input("network")] + public Input? Network { get; set; } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The time when the resource was last updated. + /// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + /// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + /// + /// VLAN ID provided by user. Must be site-wise unique. + /// + [Input("vlanId")] + public Input? VlanId { get; set; } + + /// + /// The name of the target Distributed Cloud Edge zone. + /// + [Input("zone")] + public Input? Zone { get; set; } + + public InterconnectAttachmentState() + { + } + public static new InterconnectAttachmentState Empty => new InterconnectAttachmentState(); + } +} diff --git a/sdk/dotnet/Firestore/Field.cs b/sdk/dotnet/Firestore/Field.cs index e661ca2a29..1146260713 100644 --- a/sdk/dotnet/Firestore/Field.cs +++ b/sdk/dotnet/Firestore/Field.cs @@ -51,7 +51,7 @@ namespace Pulumi.Gcp.Firestore /// { /// Project = "my-project-name", /// Database = database.Name, - /// Collection = "chatrooms__8493", + /// Collection = "chatrooms__9106", /// FieldId = "basic", /// IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs /// { @@ -128,7 +128,7 @@ namespace Pulumi.Gcp.Firestore /// { /// Project = "my-project-name", /// Database = database.Name, - /// Collection = "chatrooms__9106", + /// Collection = "chatrooms__27169", /// FieldId = "field_with_same_configuration_as_ancestor", /// IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs /// { diff --git a/sdk/dotnet/Gemini/CodeRepositoryIndex.cs b/sdk/dotnet/Gemini/CodeRepositoryIndex.cs index c29e1398c7..623878edad 100644 --- a/sdk/dotnet/Gemini/CodeRepositoryIndex.cs +++ b/sdk/dotnet/Gemini/CodeRepositoryIndex.cs @@ -80,6 +80,12 @@ public partial class CodeRepositoryIndex : global::Pulumi.CustomResource [Output("effectiveLabels")] public Output> EffectiveLabels { get; private set; } = null!; + /// + /// If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + /// + [Output("forceDestroy")] + public Output ForceDestroy { get; private set; } = null!; + /// /// Optional. Immutable. Customer-managed encryption key name, in the format /// projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -199,6 +205,12 @@ public sealed class CodeRepositoryIndexArgs : global::Pulumi.ResourceArgs [Input("codeRepositoryIndexId", required: true)] public Input CodeRepositoryIndexId { get; set; } = null!; + /// + /// If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + /// + [Input("forceDestroy")] + public Input? ForceDestroy { get; set; } + /// /// Optional. Immutable. Customer-managed encryption key name, in the format /// projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -272,6 +284,12 @@ public InputMap EffectiveLabels } } + /// + /// If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + /// + [Input("forceDestroy")] + public Input? ForceDestroy { get; set; } + /// /// Optional. Immutable. Customer-managed encryption key name, in the format /// projects/*/locations/*/keyRings/*/cryptoKeys/*. diff --git a/sdk/dotnet/GkeHub/MembershipBinding.cs b/sdk/dotnet/GkeHub/MembershipBinding.cs index 5e521c406b..e236e7cc19 100644 --- a/sdk/dotnet/GkeHub/MembershipBinding.cs +++ b/sdk/dotnet/GkeHub/MembershipBinding.cs @@ -42,7 +42,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membership = new Gcp.GkeHub.Membership("membership", new() /// { - /// MembershipId = "tf-test-membership_27169", + /// MembershipId = "tf-test-membership_75223", /// Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs /// { /// GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs @@ -60,12 +60,12 @@ namespace Pulumi.Gcp.GkeHub /// /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_75223", + /// ScopeId = "tf-test-scope_41819", /// }); /// /// var membershipBinding = new Gcp.GkeHub.MembershipBinding("membership_binding", new() /// { - /// MembershipBindingId = "tf-test-membership-binding_41819", + /// MembershipBindingId = "tf-test-membership-binding_75092", /// Scope = scope.Name, /// MembershipId = membership.MembershipId, /// Location = "global", diff --git a/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs b/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs index 829089fb24..eaa54a2307 100644 --- a/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs +++ b/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs @@ -34,7 +34,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membership = new Gcp.GkeHub.Membership("membership", new() /// { - /// MembershipId = "tf-test-membership_75092", + /// MembershipId = "tf-test-membership_2605", /// Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs /// { /// GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs @@ -54,7 +54,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding("membership_rbac_role_binding", new() /// { - /// MembershipRbacRoleBindingId = "tf-test-membership-rbac-role-binding_2605", + /// MembershipRbacRoleBindingId = "tf-test-membership-rbac-role-binding_34535", /// MembershipId = membership.MembershipId, /// User = $"service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com", /// Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs diff --git a/sdk/dotnet/GkeHub/Namespace.cs b/sdk/dotnet/GkeHub/Namespace.cs index cc333b64de..f1c4338f26 100644 --- a/sdk/dotnet/GkeHub/Namespace.cs +++ b/sdk/dotnet/GkeHub/Namespace.cs @@ -32,12 +32,12 @@ namespace Pulumi.Gcp.GkeHub /// { /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_34535", + /// ScopeId = "tf-test-scope_22375", /// }); /// /// var @namespace = new Gcp.GkeHub.Namespace("namespace", new() /// { - /// ScopeNamespaceId = "tf-test-namespace_22375", + /// ScopeNamespaceId = "tf-test-namespace_29439", /// ScopeId = scope.ScopeId, /// Scope = scope.Name, /// NamespaceLabels = diff --git a/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs b/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs index e68dceffee..b19104eb15 100644 --- a/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs +++ b/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs @@ -32,12 +32,12 @@ namespace Pulumi.Gcp.GkeHub /// { /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_29439", + /// ScopeId = "tf-test-scope_87786", /// }); /// /// var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding("scope_rbac_role_binding", new() /// { - /// ScopeRbacRoleBindingId = "tf-test-scope-rbac-role-binding_87786", + /// ScopeRbacRoleBindingId = "tf-test-scope-rbac-role-binding_2067", /// ScopeId = scope.ScopeId, /// User = "test-email@gmail.com", /// Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs diff --git a/sdk/dotnet/Iap/TunnelDestGroup.cs b/sdk/dotnet/Iap/TunnelDestGroup.cs index 3136c397f6..7c53aa2ea3 100644 --- a/sdk/dotnet/Iap/TunnelDestGroup.cs +++ b/sdk/dotnet/Iap/TunnelDestGroup.cs @@ -33,7 +33,7 @@ namespace Pulumi.Gcp.Iap /// var destGroup = new Gcp.Iap.TunnelDestGroup("dest_group", new() /// { /// Region = "us-central1", - /// GroupName = "testgroup_2067", + /// GroupName = "testgroup_40785", /// Cidrs = new[] /// { /// "10.1.0.0/16", diff --git a/sdk/dotnet/IntegrationConnectors/ManagedZone.cs b/sdk/dotnet/IntegrationConnectors/ManagedZone.cs index b9742a4423..ec995b9fab 100644 --- a/sdk/dotnet/IntegrationConnectors/ManagedZone.cs +++ b/sdk/dotnet/IntegrationConnectors/ManagedZone.cs @@ -32,8 +32,8 @@ namespace Pulumi.Gcp.IntegrationConnectors /// { /// var targetProject = new Gcp.Organizations.Project("target_project", new() /// { - /// ProjectId = "tf-test_40785", - /// Name = "tf-test_79169", + /// ProjectId = "tf-test_79169", + /// Name = "tf-test_56529", /// OrgId = "123456789", /// BillingAccount = "000000-0000000-0000000-000000", /// DeletionPolicy = "DELETE", @@ -75,8 +75,8 @@ namespace Pulumi.Gcp.IntegrationConnectors /// /// var zone = new Gcp.Dns.ManagedZone("zone", new() /// { - /// Name = "tf-test-dns_56529", - /// DnsName = "private_75413.example.com.", + /// Name = "tf-test-dns_75413", + /// DnsName = "private_55138.example.com.", /// Visibility = "private", /// PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs /// { diff --git a/sdk/dotnet/NetworkConnectivity/Spoke.cs b/sdk/dotnet/NetworkConnectivity/Spoke.cs index c871ec84f6..9c67d4dd6a 100644 --- a/sdk/dotnet/NetworkConnectivity/Spoke.cs +++ b/sdk/dotnet/NetworkConnectivity/Spoke.cs @@ -148,13 +148,13 @@ namespace Pulumi.Gcp.NetworkConnectivity /// { /// var network = new Gcp.Compute.Network("network", new() /// { - /// Name = "tf-test-network_55138", + /// Name = "tf-test-network_37559", /// AutoCreateSubnetworks = false, /// }); /// /// var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new() /// { - /// Name = "tf-test-subnet_37559", + /// Name = "tf-test-subnet_91980", /// IpCidrRange = "10.0.0.0/28", /// Region = "us-central1", /// Network = network.SelfLink, @@ -162,7 +162,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var instance = new Gcp.Compute.Instance("instance", new() /// { - /// Name = "tf-test-instance_91980", + /// Name = "tf-test-instance_37118", /// MachineType = "e2-medium", /// CanIpForward = true, /// Zone = "us-central1-a", @@ -192,7 +192,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new() /// { - /// Name = "tf-test-hub_37118", + /// Name = "tf-test-hub_80332", /// Description = "A sample hub", /// Labels = /// { @@ -202,7 +202,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var primary = new Gcp.NetworkConnectivity.Spoke("primary", new() /// { - /// Name = "tf-test-name_80332", + /// Name = "tf-test-name_13293", /// Location = "us-central1", /// Description = "A sample spoke with a linked routher appliance instance", /// Labels = @@ -594,8 +594,8 @@ namespace Pulumi.Gcp.NetworkConnectivity /// { /// AutoAcceptProjects = new[] /// { - /// "foo_13293", - /// "bar_40289", + /// "foo_40289", + /// "bar_33395", /// }, /// }, /// }); diff --git a/sdk/dotnet/NetworkSecurity/AuthzPolicy.cs b/sdk/dotnet/NetworkSecurity/AuthzPolicy.cs index d401b89dd5..934ef5549b 100644 --- a/sdk/dotnet/NetworkSecurity/AuthzPolicy.cs +++ b/sdk/dotnet/NetworkSecurity/AuthzPolicy.cs @@ -18,166 +18,6 @@ namespace Pulumi.Gcp.NetworkSecurity /// /// ## Example Usage /// - /// ### Network Services Authz Policy Advanced - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Linq; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = new Gcp.Compute.Network("default", new() - /// { - /// Name = "lb-network", - /// Project = "my-project-name", - /// AutoCreateSubnetworks = false, - /// }); - /// - /// var defaultSubnetwork = new Gcp.Compute.Subnetwork("default", new() - /// { - /// Name = "backend-subnet", - /// Project = "my-project-name", - /// Region = "us-west1", - /// IpCidrRange = "10.1.2.0/24", - /// Network = @default.Id, - /// }); - /// - /// var proxyOnly = new Gcp.Compute.Subnetwork("proxy_only", new() - /// { - /// Name = "proxy-only-subnet", - /// Project = "my-project-name", - /// Region = "us-west1", - /// IpCidrRange = "10.129.0.0/23", - /// Purpose = "REGIONAL_MANAGED_PROXY", - /// Role = "ACTIVE", - /// Network = @default.Id, - /// }); - /// - /// var defaultAddress = new Gcp.Compute.Address("default", new() - /// { - /// Name = "l7-ilb-ip-address", - /// Project = "my-project-name", - /// Region = "us-west1", - /// Subnetwork = defaultSubnetwork.Id, - /// AddressType = "INTERNAL", - /// Purpose = "GCE_ENDPOINT", - /// }); - /// - /// var defaultRegionHealthCheck = new Gcp.Compute.RegionHealthCheck("default", new() - /// { - /// Name = "l7-ilb-basic-check", - /// Project = "my-project-name", - /// Region = "us-west1", - /// HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs - /// { - /// PortSpecification = "USE_SERVING_PORT", - /// }, - /// }); - /// - /// var urlMap = new Gcp.Compute.RegionBackendService("url_map", new() - /// { - /// Name = "l7-ilb-backend-service", - /// Project = "my-project-name", - /// Region = "us-west1", - /// LoadBalancingScheme = "INTERNAL_MANAGED", - /// HealthChecks = defaultRegionHealthCheck.Id, - /// }); - /// - /// var defaultRegionUrlMap = new Gcp.Compute.RegionUrlMap("default", new() - /// { - /// Name = "l7-ilb-map", - /// Project = "my-project-name", - /// Region = "us-west1", - /// DefaultService = urlMap.Id, - /// }); - /// - /// var defaultRegionTargetHttpProxy = new Gcp.Compute.RegionTargetHttpProxy("default", new() - /// { - /// Name = "l7-ilb-proxy", - /// Project = "my-project-name", - /// Region = "us-west1", - /// UrlMap = defaultRegionUrlMap.Id, - /// }); - /// - /// var defaultForwardingRule = new Gcp.Compute.ForwardingRule("default", new() - /// { - /// Name = "l7-ilb-forwarding-rule", - /// Project = "my-project-name", - /// Region = "us-west1", - /// LoadBalancingScheme = "INTERNAL_MANAGED", - /// Network = @default.Id, - /// Subnetwork = defaultSubnetwork.Id, - /// IpProtocol = "TCP", - /// PortRange = "80", - /// Target = defaultRegionTargetHttpProxy.Id, - /// IpAddress = defaultAddress.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = - /// { - /// proxyOnly, - /// }, - /// }); - /// - /// var authzExtension = new Gcp.Compute.RegionBackendService("authz_extension", new() - /// { - /// Name = "authz-service", - /// Project = "my-project-name", - /// Region = "us-west1", - /// Protocol = "HTTP2", - /// LoadBalancingScheme = "INTERNAL_MANAGED", - /// PortName = "grpc", - /// }); - /// - /// var defaultAuthzExtension = new Gcp.NetworkServices.AuthzExtension("default", new() - /// { - /// Name = "my-authz-ext", - /// Project = "my-project-name", - /// Location = "us-west1", - /// Description = "my description", - /// LoadBalancingScheme = "INTERNAL_MANAGED", - /// Authority = "ext11.com", - /// Service = authzExtension.SelfLink, - /// Timeout = "0.1s", - /// FailOpen = false, - /// ForwardHeaders = new[] - /// { - /// "Authorization", - /// }, - /// }); - /// - /// var defaultAuthzPolicy = new Gcp.NetworkSecurity.AuthzPolicy("default", new() - /// { - /// Name = "my-authz-policy", - /// Project = "my-project-name", - /// Location = "us-west1", - /// Description = "my description", - /// Target = new Gcp.NetworkSecurity.Inputs.AuthzPolicyTargetArgs - /// { - /// LoadBalancingScheme = "INTERNAL_MANAGED", - /// Resources = new[] - /// { - /// defaultForwardingRule.SelfLink, - /// }, - /// }, - /// Action = "CUSTOM", - /// CustomProvider = new Gcp.NetworkSecurity.Inputs.AuthzPolicyCustomProviderArgs - /// { - /// AuthzExtension = new Gcp.NetworkSecurity.Inputs.AuthzPolicyCustomProviderAuthzExtensionArgs - /// { - /// Resources = new[] - /// { - /// defaultAuthzExtension.Id, - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// AuthzPolicy can be imported using any of these accepted formats: diff --git a/sdk/dotnet/OrgPolicy/Policy.cs b/sdk/dotnet/OrgPolicy/Policy.cs index 4261893cef..d22d6636cd 100644 --- a/sdk/dotnet/OrgPolicy/Policy.cs +++ b/sdk/dotnet/OrgPolicy/Policy.cs @@ -184,7 +184,7 @@ namespace Pulumi.Gcp.OrgPolicy /// { /// var constraint = new Gcp.OrgPolicy.CustomConstraint("constraint", new() /// { - /// Name = "custom.disableGkeAutoUpgrade_76044", + /// Name = "custom.disableGkeAutoUpgrade_69391", /// Parent = "organizations/123456789", /// DisplayName = "Disable GKE auto upgrade", /// Description = "Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/dotnet/ParameterManager/GetRegionalParameter.cs b/sdk/dotnet/ParameterManager/GetRegionalParameter.cs new file mode 100644 index 0000000000..3691ddd126 --- /dev/null +++ b/sdk/dotnet/ParameterManager/GetRegionalParameter.cs @@ -0,0 +1,197 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager +{ + public static class GetRegionalParameter + { + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regParameterDatasource = Gcp.ParameterManager.GetRegionalParameter.Invoke(new() + /// { + /// ParameterId = "foobar", + /// Location = "us-central1", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetRegionalParameterArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:parametermanager/getRegionalParameter:getRegionalParameter", args ?? new GetRegionalParameterArgs(), options.WithDefaults()); + + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regParameterDatasource = Gcp.ParameterManager.GetRegionalParameter.Invoke(new() + /// { + /// ParameterId = "foobar", + /// Location = "us-central1", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetRegionalParameterInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", args ?? new GetRegionalParameterInvokeArgs(), options.WithDefaults()); + + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regParameterDatasource = Gcp.ParameterManager.GetRegionalParameter.Invoke(new() + /// { + /// ParameterId = "foobar", + /// Location = "us-central1", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetRegionalParameterInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", args ?? new GetRegionalParameterInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetRegionalParameterArgs : global::Pulumi.InvokeArgs + { + /// + /// The location of the regional parameter. eg us-central1 + /// + [Input("location", required: true)] + public string Location { get; set; } = null!; + + /// + /// The name of the regional parameter. + /// + [Input("parameterId", required: true)] + public string ParameterId { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// + [Input("project")] + public string? Project { get; set; } + + public GetRegionalParameterArgs() + { + } + public static new GetRegionalParameterArgs Empty => new GetRegionalParameterArgs(); + } + + public sealed class GetRegionalParameterInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The location of the regional parameter. eg us-central1 + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// The name of the regional parameter. + /// + [Input("parameterId", required: true)] + public Input ParameterId { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// + [Input("project")] + public Input? Project { get; set; } + + public GetRegionalParameterInvokeArgs() + { + } + public static new GetRegionalParameterInvokeArgs Empty => new GetRegionalParameterInvokeArgs(); + } + + + [OutputType] + public sealed class GetRegionalParameterResult + { + public readonly string CreateTime; + public readonly ImmutableDictionary EffectiveLabels; + public readonly string Format; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + public readonly ImmutableDictionary Labels; + public readonly string Location; + public readonly string Name; + public readonly string ParameterId; + public readonly ImmutableArray PolicyMembers; + public readonly string? Project; + public readonly ImmutableDictionary PulumiLabels; + public readonly string UpdateTime; + + [OutputConstructor] + private GetRegionalParameterResult( + string createTime, + + ImmutableDictionary effectiveLabels, + + string format, + + string id, + + ImmutableDictionary labels, + + string location, + + string name, + + string parameterId, + + ImmutableArray policyMembers, + + string? project, + + ImmutableDictionary pulumiLabels, + + string updateTime) + { + CreateTime = createTime; + EffectiveLabels = effectiveLabels; + Format = format; + Id = id; + Labels = labels; + Location = location; + Name = name; + ParameterId = parameterId; + PolicyMembers = policyMembers; + Project = project; + PulumiLabels = pulumiLabels; + UpdateTime = updateTime; + } + } +} diff --git a/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberArgs.cs b/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberArgs.cs new file mode 100644 index 0000000000..2cbecbfd98 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberArgs.cs @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Inputs +{ + + public sealed class ParameterPolicyMemberArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + /// resource is deleted and recreated with the same name, the binding will be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + /// + [Input("iamPolicyNamePrincipal")] + public Input? IamPolicyNamePrincipal { get; set; } + + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + /// If a resource is deleted and recreated with the same name, the binding will not be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + /// + [Input("iamPolicyUidPrincipal")] + public Input? IamPolicyUidPrincipal { get; set; } + + public ParameterPolicyMemberArgs() + { + } + public static new ParameterPolicyMemberArgs Empty => new ParameterPolicyMemberArgs(); + } +} diff --git a/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberGetArgs.cs b/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberGetArgs.cs new file mode 100644 index 0000000000..59fe817c01 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Inputs/ParameterPolicyMemberGetArgs.cs @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Inputs +{ + + public sealed class ParameterPolicyMemberGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + /// resource is deleted and recreated with the same name, the binding will be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + /// + [Input("iamPolicyNamePrincipal")] + public Input? IamPolicyNamePrincipal { get; set; } + + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + /// If a resource is deleted and recreated with the same name, the binding will not be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + /// + [Input("iamPolicyUidPrincipal")] + public Input? IamPolicyUidPrincipal { get; set; } + + public ParameterPolicyMemberGetArgs() + { + } + public static new ParameterPolicyMemberGetArgs Empty => new ParameterPolicyMemberGetArgs(); + } +} diff --git a/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberArgs.cs b/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberArgs.cs new file mode 100644 index 0000000000..ccb27aa2d4 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberArgs.cs @@ -0,0 +1,39 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Inputs +{ + + public sealed class RegionalParameterPolicyMemberArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + /// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + /// + [Input("iamPolicyNamePrincipal")] + public Input? IamPolicyNamePrincipal { get; set; } + + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + /// a resource is deleted and recreated with the same name, the binding will not be applicable to the new + /// resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + /// + [Input("iamPolicyUidPrincipal")] + public Input? IamPolicyUidPrincipal { get; set; } + + public RegionalParameterPolicyMemberArgs() + { + } + public static new RegionalParameterPolicyMemberArgs Empty => new RegionalParameterPolicyMemberArgs(); + } +} diff --git a/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberGetArgs.cs b/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberGetArgs.cs new file mode 100644 index 0000000000..56589ed9a0 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Inputs/RegionalParameterPolicyMemberGetArgs.cs @@ -0,0 +1,39 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Inputs +{ + + public sealed class RegionalParameterPolicyMemberGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + /// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + /// + [Input("iamPolicyNamePrincipal")] + public Input? IamPolicyNamePrincipal { get; set; } + + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + /// a resource is deleted and recreated with the same name, the binding will not be applicable to the new + /// resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + /// + [Input("iamPolicyUidPrincipal")] + public Input? IamPolicyUidPrincipal { get; set; } + + public RegionalParameterPolicyMemberGetArgs() + { + } + public static new RegionalParameterPolicyMemberGetArgs Empty => new RegionalParameterPolicyMemberGetArgs(); + } +} diff --git a/sdk/dotnet/ParameterManager/Outputs/GetRegionalParameterPolicyMemberResult.cs b/sdk/dotnet/ParameterManager/Outputs/GetRegionalParameterPolicyMemberResult.cs new file mode 100644 index 0000000000..b83d50c23e --- /dev/null +++ b/sdk/dotnet/ParameterManager/Outputs/GetRegionalParameterPolicyMemberResult.cs @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Outputs +{ + + [OutputType] + public sealed class GetRegionalParameterPolicyMemberResult + { + /// + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + /// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + /// 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + /// + public readonly string IamPolicyNamePrincipal; + /// + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + /// a resource is deleted and recreated with the same name, the binding will not be applicable to the new + /// resource. Format: + /// 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + /// + public readonly string IamPolicyUidPrincipal; + + [OutputConstructor] + private GetRegionalParameterPolicyMemberResult( + string iamPolicyNamePrincipal, + + string iamPolicyUidPrincipal) + { + IamPolicyNamePrincipal = iamPolicyNamePrincipal; + IamPolicyUidPrincipal = iamPolicyUidPrincipal; + } + } +} diff --git a/sdk/dotnet/ParameterManager/Outputs/ParameterPolicyMember.cs b/sdk/dotnet/ParameterManager/Outputs/ParameterPolicyMember.cs new file mode 100644 index 0000000000..56ad7a315f --- /dev/null +++ b/sdk/dotnet/ParameterManager/Outputs/ParameterPolicyMember.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Outputs +{ + + [OutputType] + public sealed class ParameterPolicyMember + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + /// resource is deleted and recreated with the same name, the binding will be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + /// + public readonly string? IamPolicyNamePrincipal; + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + /// If a resource is deleted and recreated with the same name, the binding will not be applicable to the + /// new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + /// + public readonly string? IamPolicyUidPrincipal; + + [OutputConstructor] + private ParameterPolicyMember( + string? iamPolicyNamePrincipal, + + string? iamPolicyUidPrincipal) + { + IamPolicyNamePrincipal = iamPolicyNamePrincipal; + IamPolicyUidPrincipal = iamPolicyUidPrincipal; + } + } +} diff --git a/sdk/dotnet/ParameterManager/Outputs/RegionalParameterPolicyMember.cs b/sdk/dotnet/ParameterManager/Outputs/RegionalParameterPolicyMember.cs new file mode 100644 index 0000000000..c624fc9a13 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Outputs/RegionalParameterPolicyMember.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.ParameterManager.Outputs +{ + + [OutputType] + public sealed class RegionalParameterPolicyMember + { + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + /// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + /// + public readonly string? IamPolicyNamePrincipal; + /// + /// (Output) + /// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + /// a resource is deleted and recreated with the same name, the binding will not be applicable to the new + /// resource. Format: + /// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + /// + public readonly string? IamPolicyUidPrincipal; + + [OutputConstructor] + private RegionalParameterPolicyMember( + string? iamPolicyNamePrincipal, + + string? iamPolicyUidPrincipal) + { + IamPolicyNamePrincipal = iamPolicyNamePrincipal; + IamPolicyUidPrincipal = iamPolicyUidPrincipal; + } + } +} diff --git a/sdk/dotnet/ParameterManager/Parameter.cs b/sdk/dotnet/ParameterManager/Parameter.cs new file mode 100644 index 0000000000..5e15eab0e4 --- /dev/null +++ b/sdk/dotnet/ParameterManager/Parameter.cs @@ -0,0 +1,403 @@ +// *** 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.ParameterManager +{ + /// + /// ## Example Usage + /// + /// ### Parameter Config Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var parameter_basic = new Gcp.ParameterManager.Parameter("parameter-basic", new() + /// { + /// ParameterId = "parameter", + /// }); + /// + /// }); + /// ``` + /// ### Parameter With Format + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var parameter_with_format = new Gcp.ParameterManager.Parameter("parameter-with-format", new() + /// { + /// ParameterId = "parameter", + /// Format = "JSON", + /// }); + /// + /// }); + /// ``` + /// ### Parameter With Labels + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var parameter_with_labels = new Gcp.ParameterManager.Parameter("parameter-with-labels", new() + /// { + /// ParameterId = "parameter", + /// Labels = + /// { + /// { "key1", "val1" }, + /// { "key2", "val2" }, + /// { "key3", "val3" }, + /// { "key4", "val4" }, + /// { "key5", "val5" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// Parameter can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + /// + /// * `{{project}}/{{parameter_id}}` + /// + /// * `{{parameter_id}}` + /// + /// When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} + /// ``` + /// + [GcpResourceType("gcp:parametermanager/parameter:Parameter")] + public partial class Parameter : global::Pulumi.CustomResource + { + /// + /// The time at which the Parameter was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// The format type of the parameter resource. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Output("format")] + public Output Format { get; private set; } = null!; + + /// + /// The labels assigned to this Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The resource name of the Parameter. Format: + /// `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Output("parameterId")] + public Output ParameterId { get; private set; } = null!; + + /// + /// Policy member strings of a Google Cloud resource. + /// Structure is documented below. + /// + [Output("policyMembers")] + public Output> PolicyMembers { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// The time at which the Parameter was updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a Parameter 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 Parameter(string name, ParameterArgs args, CustomResourceOptions? options = null) + : base("gcp:parametermanager/parameter:Parameter", name, args ?? new ParameterArgs(), MakeResourceOptions(options, "")) + { + } + + private Parameter(string name, Input id, ParameterState? state = null, CustomResourceOptions? options = null) + : base("gcp:parametermanager/parameter:Parameter", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Parameter 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 Parameter Get(string name, Input id, ParameterState? state = null, CustomResourceOptions? options = null) + { + return new Parameter(name, id, state, options); + } + } + + public sealed class ParameterArgs : global::Pulumi.ResourceArgs + { + /// + /// The format type of the parameter resource. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Input("format")] + public Input? Format { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// The labels assigned to this Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Input("parameterId", required: true)] + public Input ParameterId { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + public ParameterArgs() + { + } + public static new ParameterArgs Empty => new ParameterArgs(); + } + + public sealed class ParameterState : global::Pulumi.ResourceArgs + { + /// + /// The time at which the Parameter was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The format type of the parameter resource. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Input("format")] + public Input? Format { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// The labels assigned to this Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The resource name of the Parameter. Format: + /// `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Input("parameterId")] + public Input? ParameterId { get; set; } + + [Input("policyMembers")] + private InputList? _policyMembers; + + /// + /// Policy member strings of a Google Cloud resource. + /// Structure is documented below. + /// + public InputList PolicyMembers + { + get => _policyMembers ?? (_policyMembers = new InputList()); + set => _policyMembers = value; + } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The time at which the Parameter was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ParameterState() + { + } + public static new ParameterState Empty => new ParameterState(); + } +} diff --git a/sdk/dotnet/ParameterManager/README.md b/sdk/dotnet/ParameterManager/README.md new file mode 100644 index 0000000000..061b113996 --- /dev/null +++ b/sdk/dotnet/ParameterManager/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Google Cloud Platform resources. diff --git a/sdk/dotnet/ParameterManager/RegionalParameter.cs b/sdk/dotnet/ParameterManager/RegionalParameter.cs new file mode 100644 index 0000000000..a07445e193 --- /dev/null +++ b/sdk/dotnet/ParameterManager/RegionalParameter.cs @@ -0,0 +1,424 @@ +// *** 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.ParameterManager +{ + /// + /// ## Example Usage + /// + /// ### Regional Parameter Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter("regional-parameter-basic", new() + /// { + /// ParameterId = "regional_parameter", + /// Location = "us-central1", + /// }); + /// + /// }); + /// ``` + /// ### Regional Parameter With Format + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_with_format = new Gcp.ParameterManager.RegionalParameter("regional-parameter-with-format", new() + /// { + /// ParameterId = "regional_parameter", + /// Location = "us-central1", + /// Format = "JSON", + /// }); + /// + /// }); + /// ``` + /// ### Regional Parameter With Labels + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_with_labels = new Gcp.ParameterManager.RegionalParameter("regional-parameter-with-labels", new() + /// { + /// ParameterId = "regional_parameter", + /// Location = "us-central1", + /// Labels = + /// { + /// { "key1", "val1" }, + /// { "key2", "val2" }, + /// { "key3", "val3" }, + /// { "key4", "val4" }, + /// { "key5", "val5" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// RegionalParameter can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + /// + /// * `{{project}}/{{location}}/{{parameter_id}}` + /// + /// * `{{location}}/{{parameter_id}}` + /// + /// When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} + /// ``` + /// + [GcpResourceType("gcp:parametermanager/regionalParameter:RegionalParameter")] + public partial class RegionalParameter : global::Pulumi.CustomResource + { + /// + /// The time at which the regional Parameter was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + [Output("effectiveLabels")] + public Output> EffectiveLabels { get; private set; } = null!; + + /// + /// The format type of the regional parameter. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Output("format")] + public Output Format { get; private set; } = null!; + + /// + /// The labels assigned to this regional Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The location of the regional parameter. eg us-central1 + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The resource name of the regional Parameter. Format: + /// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Output("parameterId")] + public Output ParameterId { get; private set; } = null!; + + /// + /// An object containing a unique resource identity tied to the regional parameter. + /// Structure is documented below. + /// + [Output("policyMembers")] + public Output> PolicyMembers { get; private set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + [Output("pulumiLabels")] + public Output> PulumiLabels { get; private set; } = null!; + + /// + /// The time at which the regional Parameter was updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a RegionalParameter 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 RegionalParameter(string name, RegionalParameterArgs args, CustomResourceOptions? options = null) + : base("gcp:parametermanager/regionalParameter:RegionalParameter", name, args ?? new RegionalParameterArgs(), MakeResourceOptions(options, "")) + { + } + + private RegionalParameter(string name, Input id, RegionalParameterState? state = null, CustomResourceOptions? options = null) + : base("gcp:parametermanager/regionalParameter:RegionalParameter", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "effectiveLabels", + "pulumiLabels", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing RegionalParameter 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 RegionalParameter Get(string name, Input id, RegionalParameterState? state = null, CustomResourceOptions? options = null) + { + return new RegionalParameter(name, id, state, options); + } + } + + public sealed class RegionalParameterArgs : global::Pulumi.ResourceArgs + { + /// + /// The format type of the regional parameter. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Input("format")] + public Input? Format { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// The labels assigned to this regional Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location of the regional parameter. eg us-central1 + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Input("parameterId", required: true)] + public Input ParameterId { get; set; } = null!; + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + public RegionalParameterArgs() + { + } + public static new RegionalParameterArgs Empty => new RegionalParameterArgs(); + } + + public sealed class RegionalParameterState : global::Pulumi.ResourceArgs + { + /// + /// The time at which the regional Parameter was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + [Input("effectiveLabels")] + private InputMap? _effectiveLabels; + + /// + /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + /// + public InputMap EffectiveLabels + { + get => _effectiveLabels ?? (_effectiveLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The format type of the regional parameter. + /// Default value is `UNFORMATTED`. + /// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + /// + [Input("format")] + public Input? Format { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// The labels assigned to this regional Parameter. + /// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + /// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + /// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + /// No more than 64 labels can be assigned to a given resource. + /// An object containing a list of "key": value pairs. Example: + /// { "name": "wrench", "mass": "1.3kg", "count": "3" }. + /// + /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + /// Please refer to the field `effective_labels` for all of the labels present on the resource. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location of the regional parameter. eg us-central1 + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The resource name of the regional Parameter. Format: + /// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// This must be unique within the project. + /// + /// + /// - - - + /// + [Input("parameterId")] + public Input? ParameterId { get; set; } + + [Input("policyMembers")] + private InputList? _policyMembers; + + /// + /// An object containing a unique resource identity tied to the regional parameter. + /// Structure is documented below. + /// + public InputList PolicyMembers + { + get => _policyMembers ?? (_policyMembers = new InputList()); + set => _policyMembers = value; + } + + /// + /// The ID of the project in which the resource belongs. + /// If it is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("pulumiLabels")] + private InputMap? _pulumiLabels; + + /// + /// The combination of labels configured directly on the resource + /// and default labels configured on the provider. + /// + public InputMap PulumiLabels + { + get => _pulumiLabels ?? (_pulumiLabels = new InputMap()); + set + { + var emptySecret = Output.CreateSecret(ImmutableDictionary.Create()); + _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]); + } + } + + /// + /// The time at which the regional Parameter was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public RegionalParameterState() + { + } + public static new RegionalParameterState Empty => new RegionalParameterState(); + } +} diff --git a/sdk/dotnet/ParameterManager/RegionalParameterVersion.cs b/sdk/dotnet/ParameterManager/RegionalParameterVersion.cs new file mode 100644 index 0000000000..a35b89253a --- /dev/null +++ b/sdk/dotnet/ParameterManager/RegionalParameterVersion.cs @@ -0,0 +1,333 @@ +// *** 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.ParameterManager +{ + /// + /// ## Example Usage + /// + /// ### Regional Parameter Version Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter("regional-parameter-basic", new() + /// { + /// ParameterId = "regional_parameter", + /// Location = "us-central1", + /// }); + /// + /// var regional_parameter_version_basic = new Gcp.ParameterManager.RegionalParameterVersion("regional-parameter-version-basic", new() + /// { + /// Parameter = regional_parameter_basic.Id, + /// ParameterVersionId = "regional_parameter_version", + /// ParameterData = "regional-parameter-version-data", + /// }); + /// + /// }); + /// ``` + /// ### Regional Parameter Version With Json Format + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// using Std = Pulumi.Std; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter("regional-parameter-basic", new() + /// { + /// ParameterId = "regional_parameter", + /// Format = "JSON", + /// Location = "us-central1", + /// }); + /// + /// var regional_parameter_version_with_json_format = new Gcp.ParameterManager.RegionalParameterVersion("regional-parameter-version-with-json-format", new() + /// { + /// Parameter = regional_parameter_basic.Id, + /// ParameterVersionId = "regional_parameter_version", + /// ParameterData = Std.File.Invoke(new() + /// { + /// Input = "parameter_data_json_format.yaml", + /// }).Apply(invoke => invoke.Result), + /// }); + /// + /// }); + /// ``` + /// ### Regional Parameter Version With Yaml Format + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// using Std = Pulumi.Std; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var regional_parameter_basic = new Gcp.ParameterManager.RegionalParameter("regional-parameter-basic", new() + /// { + /// ParameterId = "regional_parameter", + /// Format = "YAML", + /// Location = "us-central1", + /// }); + /// + /// var regional_parameter_version_with_yaml_format = new Gcp.ParameterManager.RegionalParameterVersion("regional-parameter-version-with-yaml-format", new() + /// { + /// Parameter = regional_parameter_basic.Id, + /// ParameterVersionId = "regional_parameter_version", + /// ParameterData = Std.File.Invoke(new() + /// { + /// Input = "parameter_data_yaml_format.yaml", + /// }).Apply(invoke => invoke.Result), + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// RegionalParameterVersion can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + /// + /// When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} + /// ``` + /// + [GcpResourceType("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion")] + public partial class RegionalParameterVersion : global::Pulumi.CustomResource + { + /// + /// The time at which the Regional Parameter Version was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + /// + [Output("disabled")] + public Output Disabled { get; private set; } = null!; + + /// + /// Location of Parameter Manager Regional parameter resource. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The resource name of the Regional Parameter Version. Format: + /// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Parameter Manager Regional Parameter resource. + /// + [Output("parameter")] + public Output Parameter { get; private set; } = null!; + + /// + /// The Regional Parameter data. + /// **Note**: This property is sensitive and will not be displayed in the plan. + /// + [Output("parameterData")] + public Output ParameterData { get; private set; } = null!; + + /// + /// Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + /// + /// + /// - - - + /// + [Output("parameterVersionId")] + public Output ParameterVersionId { get; private set; } = null!; + + /// + /// The time at which the Regional Parameter Version was updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a RegionalParameterVersion 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 RegionalParameterVersion(string name, RegionalParameterVersionArgs args, CustomResourceOptions? options = null) + : base("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, args ?? new RegionalParameterVersionArgs(), MakeResourceOptions(options, "")) + { + } + + private RegionalParameterVersion(string name, Input id, RegionalParameterVersionState? state = null, CustomResourceOptions? options = null) + : base("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "parameterData", + }, + }; + 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 RegionalParameterVersion 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 RegionalParameterVersion Get(string name, Input id, RegionalParameterVersionState? state = null, CustomResourceOptions? options = null) + { + return new RegionalParameterVersion(name, id, state, options); + } + } + + public sealed class RegionalParameterVersionArgs : global::Pulumi.ResourceArgs + { + /// + /// The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + /// + [Input("disabled")] + public Input? Disabled { get; set; } + + /// + /// Parameter Manager Regional Parameter resource. + /// + [Input("parameter", required: true)] + public Input Parameter { get; set; } = null!; + + [Input("parameterData", required: true)] + private Input? _parameterData; + + /// + /// The Regional Parameter data. + /// **Note**: This property is sensitive and will not be displayed in the plan. + /// + public Input? ParameterData + { + get => _parameterData; + set + { + var emptySecret = Output.CreateSecret(0); + _parameterData = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + /// + /// + /// - - - + /// + [Input("parameterVersionId", required: true)] + public Input ParameterVersionId { get; set; } = null!; + + public RegionalParameterVersionArgs() + { + } + public static new RegionalParameterVersionArgs Empty => new RegionalParameterVersionArgs(); + } + + public sealed class RegionalParameterVersionState : global::Pulumi.ResourceArgs + { + /// + /// The time at which the Regional Parameter Version was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + /// + [Input("disabled")] + public Input? Disabled { get; set; } + + /// + /// Location of Parameter Manager Regional parameter resource. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The resource name of the Regional Parameter Version. Format: + /// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Parameter Manager Regional Parameter resource. + /// + [Input("parameter")] + public Input? Parameter { get; set; } + + [Input("parameterData")] + private Input? _parameterData; + + /// + /// The Regional Parameter data. + /// **Note**: This property is sensitive and will not be displayed in the plan. + /// + public Input? ParameterData + { + get => _parameterData; + set + { + var emptySecret = Output.CreateSecret(0); + _parameterData = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + /// + /// + /// - - - + /// + [Input("parameterVersionId")] + public Input? ParameterVersionId { get; set; } + + /// + /// The time at which the Regional Parameter Version was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public RegionalParameterVersionState() + { + } + public static new RegionalParameterVersionState Empty => new RegionalParameterVersionState(); + } +} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index b378bca7d8..4f58f475c8 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -153,6 +153,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("cloudfunctions2CustomEndpoint")] public Output Cloudfunctions2CustomEndpoint { get; private set; } = null!; + [Output("colabCustomEndpoint")] + public Output ColabCustomEndpoint { get; private set; } = null!; + [Output("composerCustomEndpoint")] public Output ComposerCustomEndpoint { get; private set; } = null!; @@ -396,6 +399,12 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("parallelstoreCustomEndpoint")] public Output ParallelstoreCustomEndpoint { get; private set; } = null!; + [Output("parameterManagerCustomEndpoint")] + public Output ParameterManagerCustomEndpoint { get; private set; } = null!; + + [Output("parameterManagerRegionalCustomEndpoint")] + public Output ParameterManagerRegionalCustomEndpoint { get; private set; } = null!; + [Output("privatecaCustomEndpoint")] public Output PrivatecaCustomEndpoint { get; private set; } = null!; @@ -722,6 +731,9 @@ public Input? AccessToken [Input("cloudfunctions2CustomEndpoint")] public Input? Cloudfunctions2CustomEndpoint { get; set; } + [Input("colabCustomEndpoint")] + public Input? ColabCustomEndpoint { get; set; } + [Input("composerCustomEndpoint")] public Input? ComposerCustomEndpoint { get; set; } @@ -984,6 +996,12 @@ public InputList ImpersonateServiceAccountDelegates [Input("parallelstoreCustomEndpoint")] public Input? ParallelstoreCustomEndpoint { get; set; } + [Input("parameterManagerCustomEndpoint")] + public Input? ParameterManagerCustomEndpoint { get; set; } + + [Input("parameterManagerRegionalCustomEndpoint")] + public Input? ParameterManagerRegionalCustomEndpoint { get; set; } + [Input("privatecaCustomEndpoint")] public Input? PrivatecaCustomEndpoint { get; set; } diff --git a/sdk/dotnet/PubSub/Subscription.cs b/sdk/dotnet/PubSub/Subscription.cs index b9f4c85eab..5ca345a9f5 100644 --- a/sdk/dotnet/PubSub/Subscription.cs +++ b/sdk/dotnet/PubSub/Subscription.cs @@ -400,7 +400,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_69391", + /// FilenameSuffix = "-_8270", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", @@ -456,7 +456,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_8270", + /// FilenameSuffix = "-_41150", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", @@ -521,7 +521,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_41150", + /// FilenameSuffix = "-_89313", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", diff --git a/sdk/dotnet/Sql/DatabaseInstance.cs b/sdk/dotnet/Sql/DatabaseInstance.cs index 6ddef6b66c..a1bf08908e 100644 --- a/sdk/dotnet/Sql/DatabaseInstance.cs +++ b/sdk/dotnet/Sql/DatabaseInstance.cs @@ -239,9 +239,9 @@ namespace Pulumi.Gcp.Sql /// }); /// ``` /// - /// ## Switchover (SQL Server Only) + /// ## Switchover /// - /// Users can perform a switchover on any direct `cascadable` replica by following the steps below. + /// Users can perform a switchover on a replica by following the steps below. /// /// ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. /// @@ -249,22 +249,26 @@ namespace Pulumi.Gcp.Sql /// /// ### Steps to Invoke Switchover /// - /// Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) + /// MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. + /// + /// SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) /// /// #### Invoking switchover in the replica resource: /// 1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` /// 2. Remove `master_instance_name` - /// 3. Remove `replica_configuration` + /// 3. (SQL Server) Remove `replica_configuration` /// 4. Add current primary's name to the replica's `replica_names` list + /// 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. + /// 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. /// /// #### Updating the primary resource: /// 1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` /// 2. Set `master_instance_name` to the original replica (which will be primary after switchover) - /// 3. Set `replica_configuration` and set `cascadable_replica` to `true` + /// 3. (SQL Server) Set `replica_configuration` and set `cascadable_replica` to `true` /// 4. Remove original replica from `replica_names` - /// - /// > **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. - /// + /// * **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. + /// 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. + /// 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. /// #### Plan and verify that: /// - `pulumi preview` outputs **"0 to add, 0 to destroy"** /// - `pulumi preview` does not say **"must be replaced"** for any resource @@ -451,6 +455,13 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource [Output("replicaNames")] public Output> ReplicaNames { get; private set; } = null!; + /// + /// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + /// after both the primary and replica are created. + /// + [Output("replicationCluster")] + public Output ReplicationCluster { get; private set; } = null!; + /// /// The context needed to restore the database to a backup run. This field will /// cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -657,6 +668,13 @@ public InputList ReplicaNames set => _replicaNames = value; } + /// + /// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + /// after both the primary and replica are created. + /// + [Input("replicationCluster")] + public Input? ReplicationCluster { get; set; } + /// /// The context needed to restore the database to a backup run. This field will /// cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -870,6 +888,13 @@ public InputList ReplicaNames set => _replicaNames = value; } + /// + /// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + /// after both the primary and replica are created. + /// + [Input("replicationCluster")] + public Input? ReplicationCluster { get; set; } + /// /// The context needed to restore the database to a backup run. This field will /// cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. diff --git a/sdk/dotnet/Sql/GetDatabaseInstance.cs b/sdk/dotnet/Sql/GetDatabaseInstance.cs index 8c746bad49..1e9368cea1 100644 --- a/sdk/dotnet/Sql/GetDatabaseInstance.cs +++ b/sdk/dotnet/Sql/GetDatabaseInstance.cs @@ -153,6 +153,7 @@ public sealed class GetDatabaseInstanceResult public readonly string Region; public readonly ImmutableArray ReplicaConfigurations; public readonly ImmutableArray ReplicaNames; + public readonly ImmutableArray ReplicationClusters; public readonly ImmutableArray RestoreBackupContexts; public readonly string RootPassword; public readonly string SelfLink; @@ -204,6 +205,8 @@ private GetDatabaseInstanceResult( ImmutableArray replicaNames, + ImmutableArray replicationClusters, + ImmutableArray restoreBackupContexts, string rootPassword, @@ -237,6 +240,7 @@ private GetDatabaseInstanceResult( Region = region; ReplicaConfigurations = replicaConfigurations; ReplicaNames = replicaNames; + ReplicationClusters = replicationClusters; RestoreBackupContexts = restoreBackupContexts; RootPassword = rootPassword; SelfLink = selfLink; diff --git a/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterArgs.cs b/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterArgs.cs new file mode 100644 index 0000000000..6fb4f7afe6 --- /dev/null +++ b/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Sql.Inputs +{ + + public sealed class DatabaseInstanceReplicationClusterArgs : global::Pulumi.ResourceArgs + { + /// + /// Read-only field that indicates whether the replica is a DR replica. + /// + [Input("drReplica")] + public Input? DrReplica { get; set; } + + /// + /// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + /// + [Input("failoverDrReplicaName")] + public Input? FailoverDrReplicaName { get; set; } + + public DatabaseInstanceReplicationClusterArgs() + { + } + public static new DatabaseInstanceReplicationClusterArgs Empty => new DatabaseInstanceReplicationClusterArgs(); + } +} diff --git a/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterGetArgs.cs b/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterGetArgs.cs new file mode 100644 index 0000000000..f85f8d3587 --- /dev/null +++ b/sdk/dotnet/Sql/Inputs/DatabaseInstanceReplicationClusterGetArgs.cs @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Sql.Inputs +{ + + public sealed class DatabaseInstanceReplicationClusterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Read-only field that indicates whether the replica is a DR replica. + /// + [Input("drReplica")] + public Input? DrReplica { get; set; } + + /// + /// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + /// + [Input("failoverDrReplicaName")] + public Input? FailoverDrReplicaName { get; set; } + + public DatabaseInstanceReplicationClusterGetArgs() + { + } + public static new DatabaseInstanceReplicationClusterGetArgs Empty => new DatabaseInstanceReplicationClusterGetArgs(); + } +} diff --git a/sdk/dotnet/Sql/Outputs/DatabaseInstanceReplicationCluster.cs b/sdk/dotnet/Sql/Outputs/DatabaseInstanceReplicationCluster.cs new file mode 100644 index 0000000000..791f042efa --- /dev/null +++ b/sdk/dotnet/Sql/Outputs/DatabaseInstanceReplicationCluster.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.Sql.Outputs +{ + + [OutputType] + public sealed class DatabaseInstanceReplicationCluster + { + /// + /// Read-only field that indicates whether the replica is a DR replica. + /// + public readonly bool? DrReplica; + /// + /// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + /// + public readonly string? FailoverDrReplicaName; + + [OutputConstructor] + private DatabaseInstanceReplicationCluster( + bool? drReplica, + + string? failoverDrReplicaName) + { + DrReplica = drReplica; + FailoverDrReplicaName = failoverDrReplicaName; + } + } +} diff --git a/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceReplicationClusterResult.cs b/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceReplicationClusterResult.cs new file mode 100644 index 0000000000..5c9034ce73 --- /dev/null +++ b/sdk/dotnet/Sql/Outputs/GetDatabaseInstanceReplicationClusterResult.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.Sql.Outputs +{ + + [OutputType] + public sealed class GetDatabaseInstanceReplicationClusterResult + { + /// + /// Read-only field that indicates whether the replica is a DR replica. + /// + public readonly bool DrReplica; + /// + /// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + /// + public readonly string FailoverDrReplicaName; + + [OutputConstructor] + private GetDatabaseInstanceReplicationClusterResult( + bool drReplica, + + string failoverDrReplicaName) + { + DrReplica = drReplica; + FailoverDrReplicaName = failoverDrReplicaName; + } + } +} diff --git a/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceReplicationClusterResult.cs b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceReplicationClusterResult.cs new file mode 100644 index 0000000000..22c6af0395 --- /dev/null +++ b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceReplicationClusterResult.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.Sql.Outputs +{ + + [OutputType] + public sealed class GetDatabaseInstancesInstanceReplicationClusterResult + { + /// + /// Read-only field that indicates whether the replica is a DR replica. + /// + public readonly bool DrReplica; + /// + /// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + /// + public readonly string FailoverDrReplicaName; + + [OutputConstructor] + private GetDatabaseInstancesInstanceReplicationClusterResult( + bool drReplica, + + string failoverDrReplicaName) + { + DrReplica = drReplica; + FailoverDrReplicaName = failoverDrReplicaName; + } + } +} diff --git a/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceResult.cs b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceResult.cs index c86d10f7d9..8a43b4a166 100644 --- a/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceResult.cs +++ b/sdk/dotnet/Sql/Outputs/GetDatabaseInstancesInstanceResult.cs @@ -72,6 +72,10 @@ public sealed class GetDatabaseInstancesInstanceResult /// The replicas of the instance. /// public readonly ImmutableArray ReplicaNames; + /// + /// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + /// + public readonly ImmutableArray ReplicationClusters; public readonly ImmutableArray RestoreBackupContexts; /// /// Initial root password. Required for MS SQL Server. @@ -133,6 +137,8 @@ private GetDatabaseInstancesInstanceResult( ImmutableArray replicaNames, + ImmutableArray replicationClusters, + ImmutableArray restoreBackupContexts, string rootPassword, @@ -165,6 +171,7 @@ private GetDatabaseInstancesInstanceResult( Region = region; ReplicaConfigurations = replicaConfigurations; ReplicaNames = replicaNames; + ReplicationClusters = replicationClusters; RestoreBackupContexts = restoreBackupContexts; RootPassword = rootPassword; SelfLink = selfLink; diff --git a/sdk/dotnet/Sql/SourceRepresentationInstance.cs b/sdk/dotnet/Sql/SourceRepresentationInstance.cs index b0102bc265..f7e1bc47b0 100644 --- a/sdk/dotnet/Sql/SourceRepresentationInstance.cs +++ b/sdk/dotnet/Sql/SourceRepresentationInstance.cs @@ -113,8 +113,7 @@ public partial class SourceRepresentationInstance : global::Pulumi.CustomResourc public Output ClientKey { get; private set; } = null!; /// - /// The MySQL version running on your source database server. - /// Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + /// The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. /// [Output("databaseVersion")] public Output DatabaseVersion { get; private set; } = null!; @@ -243,8 +242,7 @@ public sealed class SourceRepresentationInstanceArgs : global::Pulumi.ResourceAr public Input? ClientKey { get; set; } /// - /// The MySQL version running on your source database server. - /// Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + /// The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. /// [Input("databaseVersion", required: true)] public Input DatabaseVersion { get; set; } = null!; @@ -341,8 +339,7 @@ public sealed class SourceRepresentationInstanceState : global::Pulumi.ResourceA public Input? ClientKey { get; set; } /// - /// The MySQL version running on your source database server. - /// Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + /// The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. /// [Input("databaseVersion")] public Input? DatabaseVersion { get; set; } diff --git a/sdk/dotnet/Vertex/AiEndpoint.cs b/sdk/dotnet/Vertex/AiEndpoint.cs index 0703aea154..0d76a97cdd 100644 --- a/sdk/dotnet/Vertex/AiEndpoint.cs +++ b/sdk/dotnet/Vertex/AiEndpoint.cs @@ -136,7 +136,7 @@ namespace Pulumi.Gcp.Vertex /// /// var endpoint = new Gcp.Vertex.AiEndpoint("endpoint", new() /// { - /// Name = "endpoint-name_89313", + /// Name = "endpoint-name_60646", /// DisplayName = "sample-endpoint", /// Description = "A sample vertex endpoint", /// Location = "us-central1", @@ -170,7 +170,7 @@ namespace Pulumi.Gcp.Vertex /// { /// var endpoint = new Gcp.Vertex.AiEndpoint("endpoint", new() /// { - /// Name = "endpoint-name_60646", + /// Name = "endpoint-name_9394", /// DisplayName = "sample-endpoint", /// Description = "A sample vertex endpoint", /// Location = "us-central1", diff --git a/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs b/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs index d6606a01bc..a97f936d16 100644 --- a/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs +++ b/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs @@ -258,8 +258,8 @@ namespace Pulumi.Gcp.Vertex /// /// var project = new Gcp.Organizations.Project("project", new() /// { - /// ProjectId = "tf-test_9394", - /// Name = "tf-test_11380", + /// ProjectId = "tf-test_11380", + /// Name = "tf-test_35305", /// OrgId = "123456789", /// BillingAccount = "000000-0000000-0000000-000000", /// DeletionPolicy = "DELETE", diff --git a/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go b/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go index 16cd7d8a76..1abd374aee 100644 --- a/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go +++ b/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go @@ -143,6 +143,8 @@ type AccessLevelCondition struct { // // *** AccessLevel pulumi.StringOutput `pulumi:"accessLevel"` + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // Device specific restrictions, all restrictions must hold for // the Condition to be true. If not specified, all devices are // allowed. @@ -223,6 +225,8 @@ type accessLevelConditionState struct { // // *** AccessLevel *string `pulumi:"accessLevel"` + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // Device specific restrictions, all restrictions must hold for // the Condition to be true. If not specified, all devices are // allowed. @@ -271,6 +275,8 @@ type AccessLevelConditionState struct { // // *** AccessLevel pulumi.StringPtrInput + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // Device specific restrictions, all restrictions must hold for // the Condition to be true. If not specified, all devices are // allowed. @@ -509,6 +515,11 @@ func (o AccessLevelConditionOutput) AccessLevel() pulumi.StringOutput { return o.ApplyT(func(v *AccessLevelCondition) pulumi.StringOutput { return v.AccessLevel }).(pulumi.StringOutput) } +// The name of the Access Policy this resource belongs to. +func (o AccessLevelConditionOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *AccessLevelCondition) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // Device specific restrictions, all restrictions must hold for // the Condition to be true. If not specified, all devices are // allowed. diff --git a/sdk/go/gcp/accesscontextmanager/egressPolicy.go b/sdk/go/gcp/accesscontextmanager/egressPolicy.go index b5c11aa3f5..ede9b86aec 100644 --- a/sdk/go/gcp/accesscontextmanager/egressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/egressPolicy.go @@ -32,6 +32,8 @@ import ( type EgressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -76,6 +78,8 @@ func GetEgressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering EgressPolicy resources. type egressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -85,6 +89,8 @@ type egressPolicyState struct { } type EgressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // The name of the Service Perimeter to add this resource to. // // *** @@ -203,6 +209,11 @@ func (o EgressPolicyOutput) ToEgressPolicyOutputWithContext(ctx context.Context) return o } +// The name of the Access Policy this resource belongs to. +func (o EgressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *EgressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // The name of the Service Perimeter to add this resource to. // // *** diff --git a/sdk/go/gcp/accesscontextmanager/ingressPolicy.go b/sdk/go/gcp/accesscontextmanager/ingressPolicy.go index 1eae858d30..3b4558b0d6 100644 --- a/sdk/go/gcp/accesscontextmanager/ingressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/ingressPolicy.go @@ -32,6 +32,8 @@ import ( type IngressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -76,6 +78,8 @@ func GetIngressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering IngressPolicy resources. type ingressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -85,6 +89,8 @@ type ingressPolicyState struct { } type IngressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // The name of the Service Perimeter to add this resource to. // // *** @@ -203,6 +209,11 @@ func (o IngressPolicyOutput) ToIngressPolicyOutputWithContext(ctx context.Contex return o } +// The name of the Access Policy this resource belongs to. +func (o IngressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *IngressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // The name of the Service Perimeter to add this resource to. // // *** diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go index 738fe55636..bfa0da78c2 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go @@ -38,6 +38,8 @@ import ( type ServicePerimeterDryRunEgressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom ServicePerimeterDryRunEgressPolicyEgressFromPtrOutput `pulumi:"egressFrom"` @@ -84,6 +86,8 @@ func GetServicePerimeterDryRunEgressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterDryRunEgressPolicy resources. type servicePerimeterDryRunEgressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom *ServicePerimeterDryRunEgressPolicyEgressFrom `pulumi:"egressFrom"` @@ -98,6 +102,8 @@ type servicePerimeterDryRunEgressPolicyState struct { } type ServicePerimeterDryRunEgressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom ServicePerimeterDryRunEgressPolicyEgressFromPtrInput @@ -231,6 +237,11 @@ func (o ServicePerimeterDryRunEgressPolicyOutput) ToServicePerimeterDryRunEgress return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterDryRunEgressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterDryRunEgressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. func (o ServicePerimeterDryRunEgressPolicyOutput) EgressFrom() ServicePerimeterDryRunEgressPolicyEgressFromPtrOutput { diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go index f115854705..16de5f0918 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go @@ -39,6 +39,8 @@ import ( type ServicePerimeterDryRunIngressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -86,6 +88,8 @@ func GetServicePerimeterDryRunIngressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterDryRunIngressPolicy resources. type servicePerimeterDryRunIngressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -101,6 +105,8 @@ type servicePerimeterDryRunIngressPolicyState struct { } type ServicePerimeterDryRunIngressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -237,6 +243,11 @@ func (o ServicePerimeterDryRunIngressPolicyOutput) ToServicePerimeterDryRunIngre return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterDryRunIngressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterDryRunIngressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunResource.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunResource.go index 9efe49e188..1c056820cf 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunResource.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunResource.go @@ -104,6 +104,8 @@ import ( type ServicePerimeterDryRunResource struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -150,6 +152,8 @@ func GetServicePerimeterDryRunResource(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterDryRunResource resources. type servicePerimeterDryRunResourceState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // The name of the Service Perimeter to add this resource to. // // *** @@ -161,6 +165,8 @@ type servicePerimeterDryRunResourceState struct { } type ServicePerimeterDryRunResourceState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // The name of the Service Perimeter to add this resource to. // // *** @@ -285,6 +291,11 @@ func (o ServicePerimeterDryRunResourceOutput) ToServicePerimeterDryRunResourceOu return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterDryRunResourceOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterDryRunResource) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // The name of the Service Perimeter to add this resource to. // // *** diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go index 299a9cd409..54f4865db3 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go @@ -38,6 +38,8 @@ import ( type ServicePerimeterEgressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom ServicePerimeterEgressPolicyEgressFromPtrOutput `pulumi:"egressFrom"` @@ -84,6 +86,8 @@ func GetServicePerimeterEgressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterEgressPolicy resources. type servicePerimeterEgressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom *ServicePerimeterEgressPolicyEgressFrom `pulumi:"egressFrom"` @@ -98,6 +102,8 @@ type servicePerimeterEgressPolicyState struct { } type ServicePerimeterEgressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. EgressFrom ServicePerimeterEgressPolicyEgressFromPtrInput @@ -231,6 +237,11 @@ func (o ServicePerimeterEgressPolicyOutput) ToServicePerimeterEgressPolicyOutput return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterEgressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterEgressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // Defines conditions on the source of a request causing this `EgressPolicy` to apply. // Structure is documented below. func (o ServicePerimeterEgressPolicyOutput) EgressFrom() ServicePerimeterEgressPolicyEgressFromPtrOutput { diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go index 1d0df923ac..12d0f4d426 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go @@ -39,6 +39,8 @@ import ( type ServicePerimeterIngressPolicy struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -86,6 +88,8 @@ func GetServicePerimeterIngressPolicy(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterIngressPolicy resources. type servicePerimeterIngressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -101,6 +105,8 @@ type servicePerimeterIngressPolicyState struct { } type ServicePerimeterIngressPolicyState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. @@ -237,6 +243,11 @@ func (o ServicePerimeterIngressPolicyOutput) ToServicePerimeterIngressPolicyOutp return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterIngressPolicyOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterIngressPolicy) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + // Defines the conditions on the source of a request causing this `IngressPolicy` // to apply. // Structure is documented below. diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterResource.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterResource.go index 6303ad32d0..068d36ebdf 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterResource.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterResource.go @@ -103,6 +103,10 @@ import ( type ServicePerimeterResource struct { pulumi.CustomResourceState + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringOutput `pulumi:"accessPolicyId"` + // The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + Etag pulumi.StringOutput `pulumi:"etag"` // The name of the Service Perimeter to add this resource to. // // *** @@ -149,6 +153,10 @@ func GetServicePerimeterResource(ctx *pulumi.Context, // Input properties used for looking up and filtering ServicePerimeterResource resources. type servicePerimeterResourceState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId *string `pulumi:"accessPolicyId"` + // The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + Etag *string `pulumi:"etag"` // The name of the Service Perimeter to add this resource to. // // *** @@ -160,6 +168,10 @@ type servicePerimeterResourceState struct { } type ServicePerimeterResourceState struct { + // The name of the Access Policy this resource belongs to. + AccessPolicyId pulumi.StringPtrInput + // The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + Etag pulumi.StringPtrInput // The name of the Service Perimeter to add this resource to. // // *** @@ -284,6 +296,16 @@ func (o ServicePerimeterResourceOutput) ToServicePerimeterResourceOutputWithCont return o } +// The name of the Access Policy this resource belongs to. +func (o ServicePerimeterResourceOutput) AccessPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterResource) pulumi.StringOutput { return v.AccessPolicyId }).(pulumi.StringOutput) +} + +// The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. +func (o ServicePerimeterResourceOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeterResource) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + // The name of the Service Perimeter to add this resource to. // // *** diff --git a/sdk/go/gcp/apigee/environmentAddonsConfig.go b/sdk/go/gcp/apigee/environmentAddonsConfig.go new file mode 100644 index 0000000000..2eb61ecfd5 --- /dev/null +++ b/sdk/go/gcp/apigee/environmentAddonsConfig.go @@ -0,0 +1,272 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package apigee + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Enable/Disable add-ons for an Apigee environment. +// +// To get more information about EnvironmentAddonsConfig, see: +// +// * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) +// * How-to Guides +// - [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) +// +// ## Example Usage +// +// ## Import +// +// EnvironmentAddonsConfig can be imported using any of these accepted formats: +// +// * `{{env_id}}` +// +// When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} +// ``` +type EnvironmentAddonsConfig struct { + pulumi.CustomResourceState + + // Flag to enable/disable Analytics. + AnalyticsEnabled pulumi.BoolPtrOutput `pulumi:"analyticsEnabled"` + // The Apigee environment group associated with the Apigee environment, + // in the format `organizations/{{org_name}}/environments/{{env_name}}`. + // + // *** + EnvId pulumi.StringOutput `pulumi:"envId"` +} + +// NewEnvironmentAddonsConfig registers a new resource with the given unique name, arguments, and options. +func NewEnvironmentAddonsConfig(ctx *pulumi.Context, + name string, args *EnvironmentAddonsConfigArgs, opts ...pulumi.ResourceOption) (*EnvironmentAddonsConfig, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.EnvId == nil { + return nil, errors.New("invalid value for required argument 'EnvId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource EnvironmentAddonsConfig + err := ctx.RegisterResource("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetEnvironmentAddonsConfig gets an existing EnvironmentAddonsConfig resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetEnvironmentAddonsConfig(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *EnvironmentAddonsConfigState, opts ...pulumi.ResourceOption) (*EnvironmentAddonsConfig, error) { + var resource EnvironmentAddonsConfig + err := ctx.ReadResource("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering EnvironmentAddonsConfig resources. +type environmentAddonsConfigState struct { + // Flag to enable/disable Analytics. + AnalyticsEnabled *bool `pulumi:"analyticsEnabled"` + // The Apigee environment group associated with the Apigee environment, + // in the format `organizations/{{org_name}}/environments/{{env_name}}`. + // + // *** + EnvId *string `pulumi:"envId"` +} + +type EnvironmentAddonsConfigState struct { + // Flag to enable/disable Analytics. + AnalyticsEnabled pulumi.BoolPtrInput + // The Apigee environment group associated with the Apigee environment, + // in the format `organizations/{{org_name}}/environments/{{env_name}}`. + // + // *** + EnvId pulumi.StringPtrInput +} + +func (EnvironmentAddonsConfigState) ElementType() reflect.Type { + return reflect.TypeOf((*environmentAddonsConfigState)(nil)).Elem() +} + +type environmentAddonsConfigArgs struct { + // Flag to enable/disable Analytics. + AnalyticsEnabled *bool `pulumi:"analyticsEnabled"` + // The Apigee environment group associated with the Apigee environment, + // in the format `organizations/{{org_name}}/environments/{{env_name}}`. + // + // *** + EnvId string `pulumi:"envId"` +} + +// The set of arguments for constructing a EnvironmentAddonsConfig resource. +type EnvironmentAddonsConfigArgs struct { + // Flag to enable/disable Analytics. + AnalyticsEnabled pulumi.BoolPtrInput + // The Apigee environment group associated with the Apigee environment, + // in the format `organizations/{{org_name}}/environments/{{env_name}}`. + // + // *** + EnvId pulumi.StringInput +} + +func (EnvironmentAddonsConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*environmentAddonsConfigArgs)(nil)).Elem() +} + +type EnvironmentAddonsConfigInput interface { + pulumi.Input + + ToEnvironmentAddonsConfigOutput() EnvironmentAddonsConfigOutput + ToEnvironmentAddonsConfigOutputWithContext(ctx context.Context) EnvironmentAddonsConfigOutput +} + +func (*EnvironmentAddonsConfig) ElementType() reflect.Type { + return reflect.TypeOf((**EnvironmentAddonsConfig)(nil)).Elem() +} + +func (i *EnvironmentAddonsConfig) ToEnvironmentAddonsConfigOutput() EnvironmentAddonsConfigOutput { + return i.ToEnvironmentAddonsConfigOutputWithContext(context.Background()) +} + +func (i *EnvironmentAddonsConfig) ToEnvironmentAddonsConfigOutputWithContext(ctx context.Context) EnvironmentAddonsConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentAddonsConfigOutput) +} + +// EnvironmentAddonsConfigArrayInput is an input type that accepts EnvironmentAddonsConfigArray and EnvironmentAddonsConfigArrayOutput values. +// You can construct a concrete instance of `EnvironmentAddonsConfigArrayInput` via: +// +// EnvironmentAddonsConfigArray{ EnvironmentAddonsConfigArgs{...} } +type EnvironmentAddonsConfigArrayInput interface { + pulumi.Input + + ToEnvironmentAddonsConfigArrayOutput() EnvironmentAddonsConfigArrayOutput + ToEnvironmentAddonsConfigArrayOutputWithContext(context.Context) EnvironmentAddonsConfigArrayOutput +} + +type EnvironmentAddonsConfigArray []EnvironmentAddonsConfigInput + +func (EnvironmentAddonsConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*EnvironmentAddonsConfig)(nil)).Elem() +} + +func (i EnvironmentAddonsConfigArray) ToEnvironmentAddonsConfigArrayOutput() EnvironmentAddonsConfigArrayOutput { + return i.ToEnvironmentAddonsConfigArrayOutputWithContext(context.Background()) +} + +func (i EnvironmentAddonsConfigArray) ToEnvironmentAddonsConfigArrayOutputWithContext(ctx context.Context) EnvironmentAddonsConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentAddonsConfigArrayOutput) +} + +// EnvironmentAddonsConfigMapInput is an input type that accepts EnvironmentAddonsConfigMap and EnvironmentAddonsConfigMapOutput values. +// You can construct a concrete instance of `EnvironmentAddonsConfigMapInput` via: +// +// EnvironmentAddonsConfigMap{ "key": EnvironmentAddonsConfigArgs{...} } +type EnvironmentAddonsConfigMapInput interface { + pulumi.Input + + ToEnvironmentAddonsConfigMapOutput() EnvironmentAddonsConfigMapOutput + ToEnvironmentAddonsConfigMapOutputWithContext(context.Context) EnvironmentAddonsConfigMapOutput +} + +type EnvironmentAddonsConfigMap map[string]EnvironmentAddonsConfigInput + +func (EnvironmentAddonsConfigMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*EnvironmentAddonsConfig)(nil)).Elem() +} + +func (i EnvironmentAddonsConfigMap) ToEnvironmentAddonsConfigMapOutput() EnvironmentAddonsConfigMapOutput { + return i.ToEnvironmentAddonsConfigMapOutputWithContext(context.Background()) +} + +func (i EnvironmentAddonsConfigMap) ToEnvironmentAddonsConfigMapOutputWithContext(ctx context.Context) EnvironmentAddonsConfigMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentAddonsConfigMapOutput) +} + +type EnvironmentAddonsConfigOutput struct{ *pulumi.OutputState } + +func (EnvironmentAddonsConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EnvironmentAddonsConfig)(nil)).Elem() +} + +func (o EnvironmentAddonsConfigOutput) ToEnvironmentAddonsConfigOutput() EnvironmentAddonsConfigOutput { + return o +} + +func (o EnvironmentAddonsConfigOutput) ToEnvironmentAddonsConfigOutputWithContext(ctx context.Context) EnvironmentAddonsConfigOutput { + return o +} + +// Flag to enable/disable Analytics. +func (o EnvironmentAddonsConfigOutput) AnalyticsEnabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *EnvironmentAddonsConfig) pulumi.BoolPtrOutput { return v.AnalyticsEnabled }).(pulumi.BoolPtrOutput) +} + +// The Apigee environment group associated with the Apigee environment, +// in the format `organizations/{{org_name}}/environments/{{env_name}}`. +// +// *** +func (o EnvironmentAddonsConfigOutput) EnvId() pulumi.StringOutput { + return o.ApplyT(func(v *EnvironmentAddonsConfig) pulumi.StringOutput { return v.EnvId }).(pulumi.StringOutput) +} + +type EnvironmentAddonsConfigArrayOutput struct{ *pulumi.OutputState } + +func (EnvironmentAddonsConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*EnvironmentAddonsConfig)(nil)).Elem() +} + +func (o EnvironmentAddonsConfigArrayOutput) ToEnvironmentAddonsConfigArrayOutput() EnvironmentAddonsConfigArrayOutput { + return o +} + +func (o EnvironmentAddonsConfigArrayOutput) ToEnvironmentAddonsConfigArrayOutputWithContext(ctx context.Context) EnvironmentAddonsConfigArrayOutput { + return o +} + +func (o EnvironmentAddonsConfigArrayOutput) Index(i pulumi.IntInput) EnvironmentAddonsConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *EnvironmentAddonsConfig { + return vs[0].([]*EnvironmentAddonsConfig)[vs[1].(int)] + }).(EnvironmentAddonsConfigOutput) +} + +type EnvironmentAddonsConfigMapOutput struct{ *pulumi.OutputState } + +func (EnvironmentAddonsConfigMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*EnvironmentAddonsConfig)(nil)).Elem() +} + +func (o EnvironmentAddonsConfigMapOutput) ToEnvironmentAddonsConfigMapOutput() EnvironmentAddonsConfigMapOutput { + return o +} + +func (o EnvironmentAddonsConfigMapOutput) ToEnvironmentAddonsConfigMapOutputWithContext(ctx context.Context) EnvironmentAddonsConfigMapOutput { + return o +} + +func (o EnvironmentAddonsConfigMapOutput) MapIndex(k pulumi.StringInput) EnvironmentAddonsConfigOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *EnvironmentAddonsConfig { + return vs[0].(map[string]*EnvironmentAddonsConfig)[vs[1].(string)] + }).(EnvironmentAddonsConfigOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentAddonsConfigInput)(nil)).Elem(), &EnvironmentAddonsConfig{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentAddonsConfigArrayInput)(nil)).Elem(), EnvironmentAddonsConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentAddonsConfigMapInput)(nil)).Elem(), EnvironmentAddonsConfigMap{}) + pulumi.RegisterOutputType(EnvironmentAddonsConfigOutput{}) + pulumi.RegisterOutputType(EnvironmentAddonsConfigArrayOutput{}) + pulumi.RegisterOutputType(EnvironmentAddonsConfigMapOutput{}) +} diff --git a/sdk/go/gcp/apigee/init.go b/sdk/go/gcp/apigee/init.go index 67d00d5597..8e222c5890 100644 --- a/sdk/go/gcp/apigee/init.go +++ b/sdk/go/gcp/apigee/init.go @@ -41,6 +41,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &EnvReferences{} case "gcp:apigee/environment:Environment": r = &Environment{} + case "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig": + r = &EnvironmentAddonsConfig{} case "gcp:apigee/environmentIamBinding:EnvironmentIamBinding": r = &EnvironmentIamBinding{} case "gcp:apigee/environmentIamMember:EnvironmentIamMember": @@ -138,6 +140,11 @@ func init() { "apigee/environment", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "apigee/environmentAddonsConfig", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "apigee/environmentIamBinding", diff --git a/sdk/go/gcp/artifactregistry/repository.go b/sdk/go/gcp/artifactregistry/repository.go index 5629fb445c..5a57accca0 100644 --- a/sdk/go/gcp/artifactregistry/repository.go +++ b/sdk/go/gcp/artifactregistry/repository.go @@ -350,6 +350,21 @@ import ( // CleanupPolicyDryRun: pulumi.Bool(false), // CleanupPolicies: artifactregistry.RepositoryCleanupPolicyArray{ // &artifactregistry.RepositoryCleanupPolicyArgs{ +// Id: pulumi.String("delete-untagged"), +// Action: pulumi.String("DELETE"), +// Condition: &artifactregistry.RepositoryCleanupPolicyConditionArgs{ +// TagState: pulumi.String("UNTAGGED"), +// }, +// }, +// &artifactregistry.RepositoryCleanupPolicyArgs{ +// Id: pulumi.String("keep-new-untagged"), +// Action: pulumi.String("KEEP"), +// Condition: &artifactregistry.RepositoryCleanupPolicyConditionArgs{ +// TagState: pulumi.String("UNTAGGED"), +// NewerThan: pulumi.String("7d"), +// }, +// }, +// &artifactregistry.RepositoryCleanupPolicyArgs{ // Id: pulumi.String("delete-prerelease"), // Action: pulumi.String("DELETE"), // Condition: &artifactregistry.RepositoryCleanupPolicyConditionArgs{ @@ -358,7 +373,7 @@ import ( // pulumi.String("alpha"), // pulumi.String("v0"), // }, -// OlderThan: pulumi.String("2592000s"), +// OlderThan: pulumi.String("30d"), // }, // }, // &artifactregistry.RepositoryCleanupPolicyArgs{ diff --git a/sdk/go/gcp/bigquery/connection.go b/sdk/go/gcp/bigquery/connection.go index 2ece7adca1..a82dd2c34c 100644 --- a/sdk/go/gcp/bigquery/connection.go +++ b/sdk/go/gcp/bigquery/connection.go @@ -421,7 +421,7 @@ import ( // user, err := sql.NewUser(ctx, "user", &sql.UserArgs{ // Name: pulumi.String("user"), // Instance: instance.Name, -// Password: pulumi.String("tf-test-my-password_77884"), +// Password: pulumi.String("tf-test-my-password_15222"), // }) // if err != nil { // return err diff --git a/sdk/go/gcp/bigquery/routine.go b/sdk/go/gcp/bigquery/routine.go index 082fcc340c..854c8c608f 100644 --- a/sdk/go/gcp/bigquery/routine.go +++ b/sdk/go/gcp/bigquery/routine.go @@ -368,7 +368,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // test, err := bigquery.NewDataset(ctx, "test", &bigquery.DatasetArgs{ -// DatasetId: pulumi.String("tf_test_dataset_id_15222"), +// DatasetId: pulumi.String("tf_test_dataset_id_81126"), // }) // if err != nil { // return err diff --git a/sdk/go/gcp/billing/projectInfo.go b/sdk/go/gcp/billing/projectInfo.go index 35e497b40d..dffd77a4dd 100644 --- a/sdk/go/gcp/billing/projectInfo.go +++ b/sdk/go/gcp/billing/projectInfo.go @@ -38,8 +38,8 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test_81126"), -// Name: pulumi.String("tf-test_88717"), +// ProjectId: pulumi.String("tf-test_88717"), +// Name: pulumi.String("tf-test_85794"), // OrgId: pulumi.String("123456789"), // DeletionPolicy: pulumi.String("DELETE"), // }) diff --git a/sdk/go/gcp/chronicle/dataAccessLabel.go b/sdk/go/gcp/chronicle/dataAccessLabel.go index 79ce09c4c1..0d2eba8a9f 100644 --- a/sdk/go/gcp/chronicle/dataAccessLabel.go +++ b/sdk/go/gcp/chronicle/dataAccessLabel.go @@ -75,9 +75,9 @@ type DataAccessLabel struct { // Output only. The time at which the data access label was created. CreateTime pulumi.StringOutput `pulumi:"createTime"` // Required. The ID to use for the data access label, which will become the label's - // display name and the final component of the label's resource name. It must - // only contain ASCII lowercase letters, numbers, and dashes; it must begin - // with a letter, and it must not exceed 1000 characters. + // display name and the final component of the label's resource name. The + // maximum number of characters should be 63. Regex pattern is as per AIP: + // https://google.aip.dev/122#resource-id-segments // // *** DataAccessLabelId pulumi.StringOutput `pulumi:"dataAccessLabelId"` @@ -151,9 +151,9 @@ type dataAccessLabelState struct { // Output only. The time at which the data access label was created. CreateTime *string `pulumi:"createTime"` // Required. The ID to use for the data access label, which will become the label's - // display name and the final component of the label's resource name. It must - // only contain ASCII lowercase letters, numbers, and dashes; it must begin - // with a letter, and it must not exceed 1000 characters. + // display name and the final component of the label's resource name. The + // maximum number of characters should be 63. Regex pattern is as per AIP: + // https://google.aip.dev/122#resource-id-segments // // *** DataAccessLabelId *string `pulumi:"dataAccessLabelId"` @@ -186,9 +186,9 @@ type DataAccessLabelState struct { // Output only. The time at which the data access label was created. CreateTime pulumi.StringPtrInput // Required. The ID to use for the data access label, which will become the label's - // display name and the final component of the label's resource name. It must - // only contain ASCII lowercase letters, numbers, and dashes; it must begin - // with a letter, and it must not exceed 1000 characters. + // display name and the final component of the label's resource name. The + // maximum number of characters should be 63. Regex pattern is as per AIP: + // https://google.aip.dev/122#resource-id-segments // // *** DataAccessLabelId pulumi.StringPtrInput @@ -221,9 +221,9 @@ func (DataAccessLabelState) ElementType() reflect.Type { type dataAccessLabelArgs struct { // Required. The ID to use for the data access label, which will become the label's - // display name and the final component of the label's resource name. It must - // only contain ASCII lowercase letters, numbers, and dashes; it must begin - // with a letter, and it must not exceed 1000 characters. + // display name and the final component of the label's resource name. The + // maximum number of characters should be 63. Regex pattern is as per AIP: + // https://google.aip.dev/122#resource-id-segments // // *** DataAccessLabelId string `pulumi:"dataAccessLabelId"` @@ -243,9 +243,9 @@ type dataAccessLabelArgs struct { // The set of arguments for constructing a DataAccessLabel resource. type DataAccessLabelArgs struct { // Required. The ID to use for the data access label, which will become the label's - // display name and the final component of the label's resource name. It must - // only contain ASCII lowercase letters, numbers, and dashes; it must begin - // with a letter, and it must not exceed 1000 characters. + // display name and the final component of the label's resource name. The + // maximum number of characters should be 63. Regex pattern is as per AIP: + // https://google.aip.dev/122#resource-id-segments // // *** DataAccessLabelId pulumi.StringInput @@ -360,9 +360,9 @@ func (o DataAccessLabelOutput) CreateTime() pulumi.StringOutput { } // Required. The ID to use for the data access label, which will become the label's -// display name and the final component of the label's resource name. It must -// only contain ASCII lowercase letters, numbers, and dashes; it must begin -// with a letter, and it must not exceed 1000 characters. +// display name and the final component of the label's resource name. The +// maximum number of characters should be 63. Regex pattern is as per AIP: +// https://google.aip.dev/122#resource-id-segments // // *** func (o DataAccessLabelOutput) DataAccessLabelId() pulumi.StringOutput { diff --git a/sdk/go/gcp/chronicle/init.go b/sdk/go/gcp/chronicle/init.go index 8c2381ca66..15fbcc48c7 100644 --- a/sdk/go/gcp/chronicle/init.go +++ b/sdk/go/gcp/chronicle/init.go @@ -25,6 +25,12 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &DataAccessLabel{} case "gcp:chronicle/dataAccessScope:DataAccessScope": r = &DataAccessScope{} + case "gcp:chronicle/referenceList:ReferenceList": + r = &ReferenceList{} + case "gcp:chronicle/rule:Rule": + r = &Rule{} + case "gcp:chronicle/ruleDeployment:RuleDeployment": + r = &RuleDeployment{} case "gcp:chronicle/watchlist:Watchlist": r = &Watchlist{} default: @@ -50,6 +56,21 @@ func init() { "chronicle/dataAccessScope", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "chronicle/referenceList", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "chronicle/rule", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "chronicle/ruleDeployment", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "chronicle/watchlist", diff --git a/sdk/go/gcp/chronicle/pulumiTypes.go b/sdk/go/gcp/chronicle/pulumiTypes.go index 6359ad8ff8..770c364477 100644 --- a/sdk/go/gcp/chronicle/pulumiTypes.go +++ b/sdk/go/gcp/chronicle/pulumiTypes.go @@ -653,6 +653,728 @@ func (o DataAccessScopeDeniedDataAccessLabelIngestionLabelPtrOutput) IngestionLa }).(pulumi.StringPtrOutput) } +type ReferenceListEntry struct { + // Required. The value of the entry. Maximum length is 512 characters. + // + // *** + Value string `pulumi:"value"` +} + +// ReferenceListEntryInput is an input type that accepts ReferenceListEntryArgs and ReferenceListEntryOutput values. +// You can construct a concrete instance of `ReferenceListEntryInput` via: +// +// ReferenceListEntryArgs{...} +type ReferenceListEntryInput interface { + pulumi.Input + + ToReferenceListEntryOutput() ReferenceListEntryOutput + ToReferenceListEntryOutputWithContext(context.Context) ReferenceListEntryOutput +} + +type ReferenceListEntryArgs struct { + // Required. The value of the entry. Maximum length is 512 characters. + // + // *** + Value pulumi.StringInput `pulumi:"value"` +} + +func (ReferenceListEntryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListEntry)(nil)).Elem() +} + +func (i ReferenceListEntryArgs) ToReferenceListEntryOutput() ReferenceListEntryOutput { + return i.ToReferenceListEntryOutputWithContext(context.Background()) +} + +func (i ReferenceListEntryArgs) ToReferenceListEntryOutputWithContext(ctx context.Context) ReferenceListEntryOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListEntryOutput) +} + +// ReferenceListEntryArrayInput is an input type that accepts ReferenceListEntryArray and ReferenceListEntryArrayOutput values. +// You can construct a concrete instance of `ReferenceListEntryArrayInput` via: +// +// ReferenceListEntryArray{ ReferenceListEntryArgs{...} } +type ReferenceListEntryArrayInput interface { + pulumi.Input + + ToReferenceListEntryArrayOutput() ReferenceListEntryArrayOutput + ToReferenceListEntryArrayOutputWithContext(context.Context) ReferenceListEntryArrayOutput +} + +type ReferenceListEntryArray []ReferenceListEntryInput + +func (ReferenceListEntryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ReferenceListEntry)(nil)).Elem() +} + +func (i ReferenceListEntryArray) ToReferenceListEntryArrayOutput() ReferenceListEntryArrayOutput { + return i.ToReferenceListEntryArrayOutputWithContext(context.Background()) +} + +func (i ReferenceListEntryArray) ToReferenceListEntryArrayOutputWithContext(ctx context.Context) ReferenceListEntryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListEntryArrayOutput) +} + +type ReferenceListEntryOutput struct{ *pulumi.OutputState } + +func (ReferenceListEntryOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListEntry)(nil)).Elem() +} + +func (o ReferenceListEntryOutput) ToReferenceListEntryOutput() ReferenceListEntryOutput { + return o +} + +func (o ReferenceListEntryOutput) ToReferenceListEntryOutputWithContext(ctx context.Context) ReferenceListEntryOutput { + return o +} + +// Required. The value of the entry. Maximum length is 512 characters. +// +// *** +func (o ReferenceListEntryOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v ReferenceListEntry) string { return v.Value }).(pulumi.StringOutput) +} + +type ReferenceListEntryArrayOutput struct{ *pulumi.OutputState } + +func (ReferenceListEntryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ReferenceListEntry)(nil)).Elem() +} + +func (o ReferenceListEntryArrayOutput) ToReferenceListEntryArrayOutput() ReferenceListEntryArrayOutput { + return o +} + +func (o ReferenceListEntryArrayOutput) ToReferenceListEntryArrayOutputWithContext(ctx context.Context) ReferenceListEntryArrayOutput { + return o +} + +func (o ReferenceListEntryArrayOutput) Index(i pulumi.IntInput) ReferenceListEntryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ReferenceListEntry { + return vs[0].([]ReferenceListEntry)[vs[1].(int)] + }).(ReferenceListEntryOutput) +} + +type ReferenceListScopeInfo struct { + // ReferenceListScope specifies the list of scope names of the reference list. + // Structure is documented below. + ReferenceListScope ReferenceListScopeInfoReferenceListScope `pulumi:"referenceListScope"` +} + +// ReferenceListScopeInfoInput is an input type that accepts ReferenceListScopeInfoArgs and ReferenceListScopeInfoOutput values. +// You can construct a concrete instance of `ReferenceListScopeInfoInput` via: +// +// ReferenceListScopeInfoArgs{...} +type ReferenceListScopeInfoInput interface { + pulumi.Input + + ToReferenceListScopeInfoOutput() ReferenceListScopeInfoOutput + ToReferenceListScopeInfoOutputWithContext(context.Context) ReferenceListScopeInfoOutput +} + +type ReferenceListScopeInfoArgs struct { + // ReferenceListScope specifies the list of scope names of the reference list. + // Structure is documented below. + ReferenceListScope ReferenceListScopeInfoReferenceListScopeInput `pulumi:"referenceListScope"` +} + +func (ReferenceListScopeInfoArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListScopeInfo)(nil)).Elem() +} + +func (i ReferenceListScopeInfoArgs) ToReferenceListScopeInfoOutput() ReferenceListScopeInfoOutput { + return i.ToReferenceListScopeInfoOutputWithContext(context.Background()) +} + +func (i ReferenceListScopeInfoArgs) ToReferenceListScopeInfoOutputWithContext(ctx context.Context) ReferenceListScopeInfoOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListScopeInfoOutput) +} + +// ReferenceListScopeInfoArrayInput is an input type that accepts ReferenceListScopeInfoArray and ReferenceListScopeInfoArrayOutput values. +// You can construct a concrete instance of `ReferenceListScopeInfoArrayInput` via: +// +// ReferenceListScopeInfoArray{ ReferenceListScopeInfoArgs{...} } +type ReferenceListScopeInfoArrayInput interface { + pulumi.Input + + ToReferenceListScopeInfoArrayOutput() ReferenceListScopeInfoArrayOutput + ToReferenceListScopeInfoArrayOutputWithContext(context.Context) ReferenceListScopeInfoArrayOutput +} + +type ReferenceListScopeInfoArray []ReferenceListScopeInfoInput + +func (ReferenceListScopeInfoArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ReferenceListScopeInfo)(nil)).Elem() +} + +func (i ReferenceListScopeInfoArray) ToReferenceListScopeInfoArrayOutput() ReferenceListScopeInfoArrayOutput { + return i.ToReferenceListScopeInfoArrayOutputWithContext(context.Background()) +} + +func (i ReferenceListScopeInfoArray) ToReferenceListScopeInfoArrayOutputWithContext(ctx context.Context) ReferenceListScopeInfoArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListScopeInfoArrayOutput) +} + +type ReferenceListScopeInfoOutput struct{ *pulumi.OutputState } + +func (ReferenceListScopeInfoOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListScopeInfo)(nil)).Elem() +} + +func (o ReferenceListScopeInfoOutput) ToReferenceListScopeInfoOutput() ReferenceListScopeInfoOutput { + return o +} + +func (o ReferenceListScopeInfoOutput) ToReferenceListScopeInfoOutputWithContext(ctx context.Context) ReferenceListScopeInfoOutput { + return o +} + +// ReferenceListScope specifies the list of scope names of the reference list. +// Structure is documented below. +func (o ReferenceListScopeInfoOutput) ReferenceListScope() ReferenceListScopeInfoReferenceListScopeOutput { + return o.ApplyT(func(v ReferenceListScopeInfo) ReferenceListScopeInfoReferenceListScope { return v.ReferenceListScope }).(ReferenceListScopeInfoReferenceListScopeOutput) +} + +type ReferenceListScopeInfoArrayOutput struct{ *pulumi.OutputState } + +func (ReferenceListScopeInfoArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ReferenceListScopeInfo)(nil)).Elem() +} + +func (o ReferenceListScopeInfoArrayOutput) ToReferenceListScopeInfoArrayOutput() ReferenceListScopeInfoArrayOutput { + return o +} + +func (o ReferenceListScopeInfoArrayOutput) ToReferenceListScopeInfoArrayOutputWithContext(ctx context.Context) ReferenceListScopeInfoArrayOutput { + return o +} + +func (o ReferenceListScopeInfoArrayOutput) Index(i pulumi.IntInput) ReferenceListScopeInfoOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ReferenceListScopeInfo { + return vs[0].([]ReferenceListScopeInfo)[vs[1].(int)] + }).(ReferenceListScopeInfoOutput) +} + +type ReferenceListScopeInfoReferenceListScope struct { + // Optional. The list of scope names of the reference list. The scope names should be + // full resource names and should be of the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + ScopeNames []string `pulumi:"scopeNames"` +} + +// ReferenceListScopeInfoReferenceListScopeInput is an input type that accepts ReferenceListScopeInfoReferenceListScopeArgs and ReferenceListScopeInfoReferenceListScopeOutput values. +// You can construct a concrete instance of `ReferenceListScopeInfoReferenceListScopeInput` via: +// +// ReferenceListScopeInfoReferenceListScopeArgs{...} +type ReferenceListScopeInfoReferenceListScopeInput interface { + pulumi.Input + + ToReferenceListScopeInfoReferenceListScopeOutput() ReferenceListScopeInfoReferenceListScopeOutput + ToReferenceListScopeInfoReferenceListScopeOutputWithContext(context.Context) ReferenceListScopeInfoReferenceListScopeOutput +} + +type ReferenceListScopeInfoReferenceListScopeArgs struct { + // Optional. The list of scope names of the reference list. The scope names should be + // full resource names and should be of the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + ScopeNames pulumi.StringArrayInput `pulumi:"scopeNames"` +} + +func (ReferenceListScopeInfoReferenceListScopeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListScopeInfoReferenceListScope)(nil)).Elem() +} + +func (i ReferenceListScopeInfoReferenceListScopeArgs) ToReferenceListScopeInfoReferenceListScopeOutput() ReferenceListScopeInfoReferenceListScopeOutput { + return i.ToReferenceListScopeInfoReferenceListScopeOutputWithContext(context.Background()) +} + +func (i ReferenceListScopeInfoReferenceListScopeArgs) ToReferenceListScopeInfoReferenceListScopeOutputWithContext(ctx context.Context) ReferenceListScopeInfoReferenceListScopeOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListScopeInfoReferenceListScopeOutput) +} + +type ReferenceListScopeInfoReferenceListScopeOutput struct{ *pulumi.OutputState } + +func (ReferenceListScopeInfoReferenceListScopeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ReferenceListScopeInfoReferenceListScope)(nil)).Elem() +} + +func (o ReferenceListScopeInfoReferenceListScopeOutput) ToReferenceListScopeInfoReferenceListScopeOutput() ReferenceListScopeInfoReferenceListScopeOutput { + return o +} + +func (o ReferenceListScopeInfoReferenceListScopeOutput) ToReferenceListScopeInfoReferenceListScopeOutputWithContext(ctx context.Context) ReferenceListScopeInfoReferenceListScopeOutput { + return o +} + +// Optional. The list of scope names of the reference list. The scope names should be +// full resource names and should be of the format: +// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". +func (o ReferenceListScopeInfoReferenceListScopeOutput) ScopeNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v ReferenceListScopeInfoReferenceListScope) []string { return v.ScopeNames }).(pulumi.StringArrayOutput) +} + +type RuleCompilationDiagnostic struct { + // (Output) + // Output only. The diagnostic message. + Message *string `pulumi:"message"` + // CompilationPosition represents the location of a compilation diagnostic in + // rule text. + // Structure is documented below. + Position *RuleCompilationDiagnosticPosition `pulumi:"position"` + // (Output) + // Output only. The severity of a rule's compilation diagnostic. + // Possible values: + // SEVERITY_UNSPECIFIED + // WARNING + // ERROR + Severity *string `pulumi:"severity"` + // (Output) + // Output only. Link to documentation that describes a diagnostic in more detail. + Uri *string `pulumi:"uri"` +} + +// RuleCompilationDiagnosticInput is an input type that accepts RuleCompilationDiagnosticArgs and RuleCompilationDiagnosticOutput values. +// You can construct a concrete instance of `RuleCompilationDiagnosticInput` via: +// +// RuleCompilationDiagnosticArgs{...} +type RuleCompilationDiagnosticInput interface { + pulumi.Input + + ToRuleCompilationDiagnosticOutput() RuleCompilationDiagnosticOutput + ToRuleCompilationDiagnosticOutputWithContext(context.Context) RuleCompilationDiagnosticOutput +} + +type RuleCompilationDiagnosticArgs struct { + // (Output) + // Output only. The diagnostic message. + Message pulumi.StringPtrInput `pulumi:"message"` + // CompilationPosition represents the location of a compilation diagnostic in + // rule text. + // Structure is documented below. + Position RuleCompilationDiagnosticPositionPtrInput `pulumi:"position"` + // (Output) + // Output only. The severity of a rule's compilation diagnostic. + // Possible values: + // SEVERITY_UNSPECIFIED + // WARNING + // ERROR + Severity pulumi.StringPtrInput `pulumi:"severity"` + // (Output) + // Output only. Link to documentation that describes a diagnostic in more detail. + Uri pulumi.StringPtrInput `pulumi:"uri"` +} + +func (RuleCompilationDiagnosticArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuleCompilationDiagnostic)(nil)).Elem() +} + +func (i RuleCompilationDiagnosticArgs) ToRuleCompilationDiagnosticOutput() RuleCompilationDiagnosticOutput { + return i.ToRuleCompilationDiagnosticOutputWithContext(context.Background()) +} + +func (i RuleCompilationDiagnosticArgs) ToRuleCompilationDiagnosticOutputWithContext(ctx context.Context) RuleCompilationDiagnosticOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleCompilationDiagnosticOutput) +} + +// RuleCompilationDiagnosticArrayInput is an input type that accepts RuleCompilationDiagnosticArray and RuleCompilationDiagnosticArrayOutput values. +// You can construct a concrete instance of `RuleCompilationDiagnosticArrayInput` via: +// +// RuleCompilationDiagnosticArray{ RuleCompilationDiagnosticArgs{...} } +type RuleCompilationDiagnosticArrayInput interface { + pulumi.Input + + ToRuleCompilationDiagnosticArrayOutput() RuleCompilationDiagnosticArrayOutput + ToRuleCompilationDiagnosticArrayOutputWithContext(context.Context) RuleCompilationDiagnosticArrayOutput +} + +type RuleCompilationDiagnosticArray []RuleCompilationDiagnosticInput + +func (RuleCompilationDiagnosticArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RuleCompilationDiagnostic)(nil)).Elem() +} + +func (i RuleCompilationDiagnosticArray) ToRuleCompilationDiagnosticArrayOutput() RuleCompilationDiagnosticArrayOutput { + return i.ToRuleCompilationDiagnosticArrayOutputWithContext(context.Background()) +} + +func (i RuleCompilationDiagnosticArray) ToRuleCompilationDiagnosticArrayOutputWithContext(ctx context.Context) RuleCompilationDiagnosticArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleCompilationDiagnosticArrayOutput) +} + +type RuleCompilationDiagnosticOutput struct{ *pulumi.OutputState } + +func (RuleCompilationDiagnosticOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuleCompilationDiagnostic)(nil)).Elem() +} + +func (o RuleCompilationDiagnosticOutput) ToRuleCompilationDiagnosticOutput() RuleCompilationDiagnosticOutput { + return o +} + +func (o RuleCompilationDiagnosticOutput) ToRuleCompilationDiagnosticOutputWithContext(ctx context.Context) RuleCompilationDiagnosticOutput { + return o +} + +// (Output) +// Output only. The diagnostic message. +func (o RuleCompilationDiagnosticOutput) Message() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnostic) *string { return v.Message }).(pulumi.StringPtrOutput) +} + +// CompilationPosition represents the location of a compilation diagnostic in +// rule text. +// Structure is documented below. +func (o RuleCompilationDiagnosticOutput) Position() RuleCompilationDiagnosticPositionPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnostic) *RuleCompilationDiagnosticPosition { return v.Position }).(RuleCompilationDiagnosticPositionPtrOutput) +} + +// (Output) +// Output only. The severity of a rule's compilation diagnostic. +// Possible values: +// SEVERITY_UNSPECIFIED +// WARNING +// ERROR +func (o RuleCompilationDiagnosticOutput) Severity() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnostic) *string { return v.Severity }).(pulumi.StringPtrOutput) +} + +// (Output) +// Output only. Link to documentation that describes a diagnostic in more detail. +func (o RuleCompilationDiagnosticOutput) Uri() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnostic) *string { return v.Uri }).(pulumi.StringPtrOutput) +} + +type RuleCompilationDiagnosticArrayOutput struct{ *pulumi.OutputState } + +func (RuleCompilationDiagnosticArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RuleCompilationDiagnostic)(nil)).Elem() +} + +func (o RuleCompilationDiagnosticArrayOutput) ToRuleCompilationDiagnosticArrayOutput() RuleCompilationDiagnosticArrayOutput { + return o +} + +func (o RuleCompilationDiagnosticArrayOutput) ToRuleCompilationDiagnosticArrayOutputWithContext(ctx context.Context) RuleCompilationDiagnosticArrayOutput { + return o +} + +func (o RuleCompilationDiagnosticArrayOutput) Index(i pulumi.IntInput) RuleCompilationDiagnosticOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RuleCompilationDiagnostic { + return vs[0].([]RuleCompilationDiagnostic)[vs[1].(int)] + }).(RuleCompilationDiagnosticOutput) +} + +type RuleCompilationDiagnosticPosition struct { + // (Output) + // Output only. End column number, beginning at 1. + EndColumn *int `pulumi:"endColumn"` + // (Output) + // Output only. End line number, beginning at 1. + EndLine *int `pulumi:"endLine"` + // (Output) + // Output only. Start column number, beginning at 1. + StartColumn *int `pulumi:"startColumn"` + // (Output) + // Output only. Start line number, beginning at 1. + StartLine *int `pulumi:"startLine"` +} + +// RuleCompilationDiagnosticPositionInput is an input type that accepts RuleCompilationDiagnosticPositionArgs and RuleCompilationDiagnosticPositionOutput values. +// You can construct a concrete instance of `RuleCompilationDiagnosticPositionInput` via: +// +// RuleCompilationDiagnosticPositionArgs{...} +type RuleCompilationDiagnosticPositionInput interface { + pulumi.Input + + ToRuleCompilationDiagnosticPositionOutput() RuleCompilationDiagnosticPositionOutput + ToRuleCompilationDiagnosticPositionOutputWithContext(context.Context) RuleCompilationDiagnosticPositionOutput +} + +type RuleCompilationDiagnosticPositionArgs struct { + // (Output) + // Output only. End column number, beginning at 1. + EndColumn pulumi.IntPtrInput `pulumi:"endColumn"` + // (Output) + // Output only. End line number, beginning at 1. + EndLine pulumi.IntPtrInput `pulumi:"endLine"` + // (Output) + // Output only. Start column number, beginning at 1. + StartColumn pulumi.IntPtrInput `pulumi:"startColumn"` + // (Output) + // Output only. Start line number, beginning at 1. + StartLine pulumi.IntPtrInput `pulumi:"startLine"` +} + +func (RuleCompilationDiagnosticPositionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuleCompilationDiagnosticPosition)(nil)).Elem() +} + +func (i RuleCompilationDiagnosticPositionArgs) ToRuleCompilationDiagnosticPositionOutput() RuleCompilationDiagnosticPositionOutput { + return i.ToRuleCompilationDiagnosticPositionOutputWithContext(context.Background()) +} + +func (i RuleCompilationDiagnosticPositionArgs) ToRuleCompilationDiagnosticPositionOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleCompilationDiagnosticPositionOutput) +} + +func (i RuleCompilationDiagnosticPositionArgs) ToRuleCompilationDiagnosticPositionPtrOutput() RuleCompilationDiagnosticPositionPtrOutput { + return i.ToRuleCompilationDiagnosticPositionPtrOutputWithContext(context.Background()) +} + +func (i RuleCompilationDiagnosticPositionArgs) ToRuleCompilationDiagnosticPositionPtrOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleCompilationDiagnosticPositionOutput).ToRuleCompilationDiagnosticPositionPtrOutputWithContext(ctx) +} + +// RuleCompilationDiagnosticPositionPtrInput is an input type that accepts RuleCompilationDiagnosticPositionArgs, RuleCompilationDiagnosticPositionPtr and RuleCompilationDiagnosticPositionPtrOutput values. +// You can construct a concrete instance of `RuleCompilationDiagnosticPositionPtrInput` via: +// +// RuleCompilationDiagnosticPositionArgs{...} +// +// or: +// +// nil +type RuleCompilationDiagnosticPositionPtrInput interface { + pulumi.Input + + ToRuleCompilationDiagnosticPositionPtrOutput() RuleCompilationDiagnosticPositionPtrOutput + ToRuleCompilationDiagnosticPositionPtrOutputWithContext(context.Context) RuleCompilationDiagnosticPositionPtrOutput +} + +type ruleCompilationDiagnosticPositionPtrType RuleCompilationDiagnosticPositionArgs + +func RuleCompilationDiagnosticPositionPtr(v *RuleCompilationDiagnosticPositionArgs) RuleCompilationDiagnosticPositionPtrInput { + return (*ruleCompilationDiagnosticPositionPtrType)(v) +} + +func (*ruleCompilationDiagnosticPositionPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuleCompilationDiagnosticPosition)(nil)).Elem() +} + +func (i *ruleCompilationDiagnosticPositionPtrType) ToRuleCompilationDiagnosticPositionPtrOutput() RuleCompilationDiagnosticPositionPtrOutput { + return i.ToRuleCompilationDiagnosticPositionPtrOutputWithContext(context.Background()) +} + +func (i *ruleCompilationDiagnosticPositionPtrType) ToRuleCompilationDiagnosticPositionPtrOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleCompilationDiagnosticPositionPtrOutput) +} + +type RuleCompilationDiagnosticPositionOutput struct{ *pulumi.OutputState } + +func (RuleCompilationDiagnosticPositionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuleCompilationDiagnosticPosition)(nil)).Elem() +} + +func (o RuleCompilationDiagnosticPositionOutput) ToRuleCompilationDiagnosticPositionOutput() RuleCompilationDiagnosticPositionOutput { + return o +} + +func (o RuleCompilationDiagnosticPositionOutput) ToRuleCompilationDiagnosticPositionOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionOutput { + return o +} + +func (o RuleCompilationDiagnosticPositionOutput) ToRuleCompilationDiagnosticPositionPtrOutput() RuleCompilationDiagnosticPositionPtrOutput { + return o.ToRuleCompilationDiagnosticPositionPtrOutputWithContext(context.Background()) +} + +func (o RuleCompilationDiagnosticPositionOutput) ToRuleCompilationDiagnosticPositionPtrOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuleCompilationDiagnosticPosition) *RuleCompilationDiagnosticPosition { + return &v + }).(RuleCompilationDiagnosticPositionPtrOutput) +} + +// (Output) +// Output only. End column number, beginning at 1. +func (o RuleCompilationDiagnosticPositionOutput) EndColumn() pulumi.IntPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnosticPosition) *int { return v.EndColumn }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. End line number, beginning at 1. +func (o RuleCompilationDiagnosticPositionOutput) EndLine() pulumi.IntPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnosticPosition) *int { return v.EndLine }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. Start column number, beginning at 1. +func (o RuleCompilationDiagnosticPositionOutput) StartColumn() pulumi.IntPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnosticPosition) *int { return v.StartColumn }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. Start line number, beginning at 1. +func (o RuleCompilationDiagnosticPositionOutput) StartLine() pulumi.IntPtrOutput { + return o.ApplyT(func(v RuleCompilationDiagnosticPosition) *int { return v.StartLine }).(pulumi.IntPtrOutput) +} + +type RuleCompilationDiagnosticPositionPtrOutput struct{ *pulumi.OutputState } + +func (RuleCompilationDiagnosticPositionPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuleCompilationDiagnosticPosition)(nil)).Elem() +} + +func (o RuleCompilationDiagnosticPositionPtrOutput) ToRuleCompilationDiagnosticPositionPtrOutput() RuleCompilationDiagnosticPositionPtrOutput { + return o +} + +func (o RuleCompilationDiagnosticPositionPtrOutput) ToRuleCompilationDiagnosticPositionPtrOutputWithContext(ctx context.Context) RuleCompilationDiagnosticPositionPtrOutput { + return o +} + +func (o RuleCompilationDiagnosticPositionPtrOutput) Elem() RuleCompilationDiagnosticPositionOutput { + return o.ApplyT(func(v *RuleCompilationDiagnosticPosition) RuleCompilationDiagnosticPosition { + if v != nil { + return *v + } + var ret RuleCompilationDiagnosticPosition + return ret + }).(RuleCompilationDiagnosticPositionOutput) +} + +// (Output) +// Output only. End column number, beginning at 1. +func (o RuleCompilationDiagnosticPositionPtrOutput) EndColumn() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RuleCompilationDiagnosticPosition) *int { + if v == nil { + return nil + } + return v.EndColumn + }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. End line number, beginning at 1. +func (o RuleCompilationDiagnosticPositionPtrOutput) EndLine() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RuleCompilationDiagnosticPosition) *int { + if v == nil { + return nil + } + return v.EndLine + }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. Start column number, beginning at 1. +func (o RuleCompilationDiagnosticPositionPtrOutput) StartColumn() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RuleCompilationDiagnosticPosition) *int { + if v == nil { + return nil + } + return v.StartColumn + }).(pulumi.IntPtrOutput) +} + +// (Output) +// Output only. Start line number, beginning at 1. +func (o RuleCompilationDiagnosticPositionPtrOutput) StartLine() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RuleCompilationDiagnosticPosition) *int { + if v == nil { + return nil + } + return v.StartLine + }).(pulumi.IntPtrOutput) +} + +type RuleSeverity struct { + // The display name of the severity level. Extracted from the meta section of + // the rule text. + DisplayName *string `pulumi:"displayName"` +} + +// RuleSeverityInput is an input type that accepts RuleSeverityArgs and RuleSeverityOutput values. +// You can construct a concrete instance of `RuleSeverityInput` via: +// +// RuleSeverityArgs{...} +type RuleSeverityInput interface { + pulumi.Input + + ToRuleSeverityOutput() RuleSeverityOutput + ToRuleSeverityOutputWithContext(context.Context) RuleSeverityOutput +} + +type RuleSeverityArgs struct { + // The display name of the severity level. Extracted from the meta section of + // the rule text. + DisplayName pulumi.StringPtrInput `pulumi:"displayName"` +} + +func (RuleSeverityArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuleSeverity)(nil)).Elem() +} + +func (i RuleSeverityArgs) ToRuleSeverityOutput() RuleSeverityOutput { + return i.ToRuleSeverityOutputWithContext(context.Background()) +} + +func (i RuleSeverityArgs) ToRuleSeverityOutputWithContext(ctx context.Context) RuleSeverityOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleSeverityOutput) +} + +// RuleSeverityArrayInput is an input type that accepts RuleSeverityArray and RuleSeverityArrayOutput values. +// You can construct a concrete instance of `RuleSeverityArrayInput` via: +// +// RuleSeverityArray{ RuleSeverityArgs{...} } +type RuleSeverityArrayInput interface { + pulumi.Input + + ToRuleSeverityArrayOutput() RuleSeverityArrayOutput + ToRuleSeverityArrayOutputWithContext(context.Context) RuleSeverityArrayOutput +} + +type RuleSeverityArray []RuleSeverityInput + +func (RuleSeverityArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RuleSeverity)(nil)).Elem() +} + +func (i RuleSeverityArray) ToRuleSeverityArrayOutput() RuleSeverityArrayOutput { + return i.ToRuleSeverityArrayOutputWithContext(context.Background()) +} + +func (i RuleSeverityArray) ToRuleSeverityArrayOutputWithContext(ctx context.Context) RuleSeverityArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleSeverityArrayOutput) +} + +type RuleSeverityOutput struct{ *pulumi.OutputState } + +func (RuleSeverityOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuleSeverity)(nil)).Elem() +} + +func (o RuleSeverityOutput) ToRuleSeverityOutput() RuleSeverityOutput { + return o +} + +func (o RuleSeverityOutput) ToRuleSeverityOutputWithContext(ctx context.Context) RuleSeverityOutput { + return o +} + +// The display name of the severity level. Extracted from the meta section of +// the rule text. +func (o RuleSeverityOutput) DisplayName() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuleSeverity) *string { return v.DisplayName }).(pulumi.StringPtrOutput) +} + +type RuleSeverityArrayOutput struct{ *pulumi.OutputState } + +func (RuleSeverityArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RuleSeverity)(nil)).Elem() +} + +func (o RuleSeverityArrayOutput) ToRuleSeverityArrayOutput() RuleSeverityArrayOutput { + return o +} + +func (o RuleSeverityArrayOutput) ToRuleSeverityArrayOutputWithContext(ctx context.Context) RuleSeverityArrayOutput { + return o +} + +func (o RuleSeverityArrayOutput) Index(i pulumi.IntInput) RuleSeverityOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RuleSeverity { + return vs[0].([]RuleSeverity)[vs[1].(int)] + }).(RuleSeverityOutput) +} + type WatchlistEntityCount struct { // (Output) // Output only. Count of asset type entities in the watchlist. @@ -1174,6 +1896,17 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*DataAccessScopeDeniedDataAccessLabelArrayInput)(nil)).Elem(), DataAccessScopeDeniedDataAccessLabelArray{}) pulumi.RegisterInputType(reflect.TypeOf((*DataAccessScopeDeniedDataAccessLabelIngestionLabelInput)(nil)).Elem(), DataAccessScopeDeniedDataAccessLabelIngestionLabelArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DataAccessScopeDeniedDataAccessLabelIngestionLabelPtrInput)(nil)).Elem(), DataAccessScopeDeniedDataAccessLabelIngestionLabelArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListEntryInput)(nil)).Elem(), ReferenceListEntryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListEntryArrayInput)(nil)).Elem(), ReferenceListEntryArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListScopeInfoInput)(nil)).Elem(), ReferenceListScopeInfoArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListScopeInfoArrayInput)(nil)).Elem(), ReferenceListScopeInfoArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListScopeInfoReferenceListScopeInput)(nil)).Elem(), ReferenceListScopeInfoReferenceListScopeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleCompilationDiagnosticInput)(nil)).Elem(), RuleCompilationDiagnosticArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleCompilationDiagnosticArrayInput)(nil)).Elem(), RuleCompilationDiagnosticArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleCompilationDiagnosticPositionInput)(nil)).Elem(), RuleCompilationDiagnosticPositionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleCompilationDiagnosticPositionPtrInput)(nil)).Elem(), RuleCompilationDiagnosticPositionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleSeverityInput)(nil)).Elem(), RuleSeverityArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleSeverityArrayInput)(nil)).Elem(), RuleSeverityArray{}) pulumi.RegisterInputType(reflect.TypeOf((*WatchlistEntityCountInput)(nil)).Elem(), WatchlistEntityCountArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WatchlistEntityCountArrayInput)(nil)).Elem(), WatchlistEntityCountArray{}) pulumi.RegisterInputType(reflect.TypeOf((*WatchlistEntityPopulationMechanismInput)(nil)).Elem(), WatchlistEntityPopulationMechanismArgs{}) @@ -1190,6 +1923,17 @@ func init() { pulumi.RegisterOutputType(DataAccessScopeDeniedDataAccessLabelArrayOutput{}) pulumi.RegisterOutputType(DataAccessScopeDeniedDataAccessLabelIngestionLabelOutput{}) pulumi.RegisterOutputType(DataAccessScopeDeniedDataAccessLabelIngestionLabelPtrOutput{}) + pulumi.RegisterOutputType(ReferenceListEntryOutput{}) + pulumi.RegisterOutputType(ReferenceListEntryArrayOutput{}) + pulumi.RegisterOutputType(ReferenceListScopeInfoOutput{}) + pulumi.RegisterOutputType(ReferenceListScopeInfoArrayOutput{}) + pulumi.RegisterOutputType(ReferenceListScopeInfoReferenceListScopeOutput{}) + pulumi.RegisterOutputType(RuleCompilationDiagnosticOutput{}) + pulumi.RegisterOutputType(RuleCompilationDiagnosticArrayOutput{}) + pulumi.RegisterOutputType(RuleCompilationDiagnosticPositionOutput{}) + pulumi.RegisterOutputType(RuleCompilationDiagnosticPositionPtrOutput{}) + pulumi.RegisterOutputType(RuleSeverityOutput{}) + pulumi.RegisterOutputType(RuleSeverityArrayOutput{}) pulumi.RegisterOutputType(WatchlistEntityCountOutput{}) pulumi.RegisterOutputType(WatchlistEntityCountArrayOutput{}) pulumi.RegisterOutputType(WatchlistEntityPopulationMechanismOutput{}) diff --git a/sdk/go/gcp/chronicle/referenceList.go b/sdk/go/gcp/chronicle/referenceList.go new file mode 100644 index 0000000000..2fcb8cb339 --- /dev/null +++ b/sdk/go/gcp/chronicle/referenceList.go @@ -0,0 +1,541 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package chronicle + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Chronicle Referencelist Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := chronicle.NewReferenceList(ctx, "example", &chronicle.ReferenceListArgs{ +// Location: pulumi.String("us"), +// Instance: pulumi.String("00000000-0000-0000-0000-000000000000"), +// ReferenceListId: pulumi.String("reference_list_id"), +// Description: pulumi.String("referencelist-description"), +// Entries: chronicle.ReferenceListEntryArray{ +// &chronicle.ReferenceListEntryArgs{ +// Value: pulumi.String("referencelist-entry-value"), +// }, +// }, +// SyntaxType: pulumi.String("REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ReferenceList can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` +// +// * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` +// +// * `{{location}}/{{instance}}/{{reference_list_id}}` +// +// When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} +// ``` +type ReferenceList struct { + pulumi.CustomResourceState + + // Required. A user-provided description of the reference list. + Description pulumi.StringOutput `pulumi:"description"` + // Output only. The unique display name of the reference list. + DisplayName pulumi.StringOutput `pulumi:"displayName"` + // Required. The entries of the reference list. + // When listed, they are returned in the order that was specified at creation + // or update. The combined size of the values of the reference list may not + // exceed 6MB. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + // Structure is documented below. + Entries ReferenceListEntryArrayOutput `pulumi:"entries"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringOutput `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringOutput `pulumi:"location"` + // Output only. The resource name of the reference list. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + Name pulumi.StringOutput `pulumi:"name"` + Project pulumi.StringOutput `pulumi:"project"` + // Required. The ID to use for the reference list. This is also the display name for + // the reference list. It must satisfy the following requirements: + // - Starts with letter. + // - Contains only letters, numbers and underscore. + // - Has length < 256. + // - Must be unique. + ReferenceListId pulumi.StringOutput `pulumi:"referenceListId"` + // Output only. The timestamp when the reference list was last updated. + RevisionCreateTime pulumi.StringOutput `pulumi:"revisionCreateTime"` + // Output only. The count of self-authored rules using the reference list. + RuleAssociationsCount pulumi.IntOutput `pulumi:"ruleAssociationsCount"` + // Output only. The resource names for the associated self-authored Rules that use this + // reference list. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Rules pulumi.StringArrayOutput `pulumi:"rules"` + // ScopeInfo specifies the scope info of the reference list. + // Structure is documented below. + ScopeInfos ReferenceListScopeInfoArrayOutput `pulumi:"scopeInfos"` + // Possible values: + // REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + // REFERENCE_LIST_SYNTAX_TYPE_REGEX + // REFERENCE_LIST_SYNTAX_TYPE_CIDR + SyntaxType pulumi.StringOutput `pulumi:"syntaxType"` +} + +// NewReferenceList registers a new resource with the given unique name, arguments, and options. +func NewReferenceList(ctx *pulumi.Context, + name string, args *ReferenceListArgs, opts ...pulumi.ResourceOption) (*ReferenceList, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Description == nil { + return nil, errors.New("invalid value for required argument 'Description'") + } + if args.Entries == nil { + return nil, errors.New("invalid value for required argument 'Entries'") + } + if args.Instance == nil { + return nil, errors.New("invalid value for required argument 'Instance'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.ReferenceListId == nil { + return nil, errors.New("invalid value for required argument 'ReferenceListId'") + } + if args.SyntaxType == nil { + return nil, errors.New("invalid value for required argument 'SyntaxType'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ReferenceList + err := ctx.RegisterResource("gcp:chronicle/referenceList:ReferenceList", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetReferenceList gets an existing ReferenceList resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetReferenceList(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ReferenceListState, opts ...pulumi.ResourceOption) (*ReferenceList, error) { + var resource ReferenceList + err := ctx.ReadResource("gcp:chronicle/referenceList:ReferenceList", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ReferenceList resources. +type referenceListState struct { + // Required. A user-provided description of the reference list. + Description *string `pulumi:"description"` + // Output only. The unique display name of the reference list. + DisplayName *string `pulumi:"displayName"` + // Required. The entries of the reference list. + // When listed, they are returned in the order that was specified at creation + // or update. The combined size of the values of the reference list may not + // exceed 6MB. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + // Structure is documented below. + Entries []ReferenceListEntry `pulumi:"entries"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance *string `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location *string `pulumi:"location"` + // Output only. The resource name of the reference list. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + Name *string `pulumi:"name"` + Project *string `pulumi:"project"` + // Required. The ID to use for the reference list. This is also the display name for + // the reference list. It must satisfy the following requirements: + // - Starts with letter. + // - Contains only letters, numbers and underscore. + // - Has length < 256. + // - Must be unique. + ReferenceListId *string `pulumi:"referenceListId"` + // Output only. The timestamp when the reference list was last updated. + RevisionCreateTime *string `pulumi:"revisionCreateTime"` + // Output only. The count of self-authored rules using the reference list. + RuleAssociationsCount *int `pulumi:"ruleAssociationsCount"` + // Output only. The resource names for the associated self-authored Rules that use this + // reference list. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Rules []string `pulumi:"rules"` + // ScopeInfo specifies the scope info of the reference list. + // Structure is documented below. + ScopeInfos []ReferenceListScopeInfo `pulumi:"scopeInfos"` + // Possible values: + // REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + // REFERENCE_LIST_SYNTAX_TYPE_REGEX + // REFERENCE_LIST_SYNTAX_TYPE_CIDR + SyntaxType *string `pulumi:"syntaxType"` +} + +type ReferenceListState struct { + // Required. A user-provided description of the reference list. + Description pulumi.StringPtrInput + // Output only. The unique display name of the reference list. + DisplayName pulumi.StringPtrInput + // Required. The entries of the reference list. + // When listed, they are returned in the order that was specified at creation + // or update. The combined size of the values of the reference list may not + // exceed 6MB. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + // Structure is documented below. + Entries ReferenceListEntryArrayInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringPtrInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringPtrInput + // Output only. The resource name of the reference list. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + Name pulumi.StringPtrInput + Project pulumi.StringPtrInput + // Required. The ID to use for the reference list. This is also the display name for + // the reference list. It must satisfy the following requirements: + // - Starts with letter. + // - Contains only letters, numbers and underscore. + // - Has length < 256. + // - Must be unique. + ReferenceListId pulumi.StringPtrInput + // Output only. The timestamp when the reference list was last updated. + RevisionCreateTime pulumi.StringPtrInput + // Output only. The count of self-authored rules using the reference list. + RuleAssociationsCount pulumi.IntPtrInput + // Output only. The resource names for the associated self-authored Rules that use this + // reference list. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Rules pulumi.StringArrayInput + // ScopeInfo specifies the scope info of the reference list. + // Structure is documented below. + ScopeInfos ReferenceListScopeInfoArrayInput + // Possible values: + // REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + // REFERENCE_LIST_SYNTAX_TYPE_REGEX + // REFERENCE_LIST_SYNTAX_TYPE_CIDR + SyntaxType pulumi.StringPtrInput +} + +func (ReferenceListState) ElementType() reflect.Type { + return reflect.TypeOf((*referenceListState)(nil)).Elem() +} + +type referenceListArgs struct { + // Required. A user-provided description of the reference list. + Description string `pulumi:"description"` + // Required. The entries of the reference list. + // When listed, they are returned in the order that was specified at creation + // or update. The combined size of the values of the reference list may not + // exceed 6MB. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + // Structure is documented below. + Entries []ReferenceListEntry `pulumi:"entries"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance string `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location string `pulumi:"location"` + Project *string `pulumi:"project"` + // Required. The ID to use for the reference list. This is also the display name for + // the reference list. It must satisfy the following requirements: + // - Starts with letter. + // - Contains only letters, numbers and underscore. + // - Has length < 256. + // - Must be unique. + ReferenceListId string `pulumi:"referenceListId"` + // Possible values: + // REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + // REFERENCE_LIST_SYNTAX_TYPE_REGEX + // REFERENCE_LIST_SYNTAX_TYPE_CIDR + SyntaxType string `pulumi:"syntaxType"` +} + +// The set of arguments for constructing a ReferenceList resource. +type ReferenceListArgs struct { + // Required. A user-provided description of the reference list. + Description pulumi.StringInput + // Required. The entries of the reference list. + // When listed, they are returned in the order that was specified at creation + // or update. The combined size of the values of the reference list may not + // exceed 6MB. + // This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + // Structure is documented below. + Entries ReferenceListEntryArrayInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringInput + Project pulumi.StringPtrInput + // Required. The ID to use for the reference list. This is also the display name for + // the reference list. It must satisfy the following requirements: + // - Starts with letter. + // - Contains only letters, numbers and underscore. + // - Has length < 256. + // - Must be unique. + ReferenceListId pulumi.StringInput + // Possible values: + // REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + // REFERENCE_LIST_SYNTAX_TYPE_REGEX + // REFERENCE_LIST_SYNTAX_TYPE_CIDR + SyntaxType pulumi.StringInput +} + +func (ReferenceListArgs) ElementType() reflect.Type { + return reflect.TypeOf((*referenceListArgs)(nil)).Elem() +} + +type ReferenceListInput interface { + pulumi.Input + + ToReferenceListOutput() ReferenceListOutput + ToReferenceListOutputWithContext(ctx context.Context) ReferenceListOutput +} + +func (*ReferenceList) ElementType() reflect.Type { + return reflect.TypeOf((**ReferenceList)(nil)).Elem() +} + +func (i *ReferenceList) ToReferenceListOutput() ReferenceListOutput { + return i.ToReferenceListOutputWithContext(context.Background()) +} + +func (i *ReferenceList) ToReferenceListOutputWithContext(ctx context.Context) ReferenceListOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListOutput) +} + +// ReferenceListArrayInput is an input type that accepts ReferenceListArray and ReferenceListArrayOutput values. +// You can construct a concrete instance of `ReferenceListArrayInput` via: +// +// ReferenceListArray{ ReferenceListArgs{...} } +type ReferenceListArrayInput interface { + pulumi.Input + + ToReferenceListArrayOutput() ReferenceListArrayOutput + ToReferenceListArrayOutputWithContext(context.Context) ReferenceListArrayOutput +} + +type ReferenceListArray []ReferenceListInput + +func (ReferenceListArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ReferenceList)(nil)).Elem() +} + +func (i ReferenceListArray) ToReferenceListArrayOutput() ReferenceListArrayOutput { + return i.ToReferenceListArrayOutputWithContext(context.Background()) +} + +func (i ReferenceListArray) ToReferenceListArrayOutputWithContext(ctx context.Context) ReferenceListArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListArrayOutput) +} + +// ReferenceListMapInput is an input type that accepts ReferenceListMap and ReferenceListMapOutput values. +// You can construct a concrete instance of `ReferenceListMapInput` via: +// +// ReferenceListMap{ "key": ReferenceListArgs{...} } +type ReferenceListMapInput interface { + pulumi.Input + + ToReferenceListMapOutput() ReferenceListMapOutput + ToReferenceListMapOutputWithContext(context.Context) ReferenceListMapOutput +} + +type ReferenceListMap map[string]ReferenceListInput + +func (ReferenceListMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ReferenceList)(nil)).Elem() +} + +func (i ReferenceListMap) ToReferenceListMapOutput() ReferenceListMapOutput { + return i.ToReferenceListMapOutputWithContext(context.Background()) +} + +func (i ReferenceListMap) ToReferenceListMapOutputWithContext(ctx context.Context) ReferenceListMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ReferenceListMapOutput) +} + +type ReferenceListOutput struct{ *pulumi.OutputState } + +func (ReferenceListOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ReferenceList)(nil)).Elem() +} + +func (o ReferenceListOutput) ToReferenceListOutput() ReferenceListOutput { + return o +} + +func (o ReferenceListOutput) ToReferenceListOutputWithContext(ctx context.Context) ReferenceListOutput { + return o +} + +// Required. A user-provided description of the reference list. +func (o ReferenceListOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.Description }).(pulumi.StringOutput) +} + +// Output only. The unique display name of the reference list. +func (o ReferenceListOutput) DisplayName() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.DisplayName }).(pulumi.StringOutput) +} + +// Required. The entries of the reference list. +// When listed, they are returned in the order that was specified at creation +// or update. The combined size of the values of the reference list may not +// exceed 6MB. +// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. +// Structure is documented below. +func (o ReferenceListOutput) Entries() ReferenceListEntryArrayOutput { + return o.ApplyT(func(v *ReferenceList) ReferenceListEntryArrayOutput { return v.Entries }).(ReferenceListEntryArrayOutput) +} + +// The unique identifier for the Chronicle instance, which is the same as the customer ID. +func (o ReferenceListOutput) Instance() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.Instance }).(pulumi.StringOutput) +} + +// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". +func (o ReferenceListOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Output only. The resource name of the reference list. +// Format: +// projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} +func (o ReferenceListOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +func (o ReferenceListOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Required. The ID to use for the reference list. This is also the display name for +// the reference list. It must satisfy the following requirements: +// - Starts with letter. +// - Contains only letters, numbers and underscore. +// - Has length < 256. +// - Must be unique. +func (o ReferenceListOutput) ReferenceListId() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.ReferenceListId }).(pulumi.StringOutput) +} + +// Output only. The timestamp when the reference list was last updated. +func (o ReferenceListOutput) RevisionCreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.RevisionCreateTime }).(pulumi.StringOutput) +} + +// Output only. The count of self-authored rules using the reference list. +func (o ReferenceListOutput) RuleAssociationsCount() pulumi.IntOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.IntOutput { return v.RuleAssociationsCount }).(pulumi.IntOutput) +} + +// Output only. The resource names for the associated self-authored Rules that use this +// reference list. +// This is returned only when the view is REFERENCE_LIST_VIEW_FULL. +func (o ReferenceListOutput) Rules() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringArrayOutput { return v.Rules }).(pulumi.StringArrayOutput) +} + +// ScopeInfo specifies the scope info of the reference list. +// Structure is documented below. +func (o ReferenceListOutput) ScopeInfos() ReferenceListScopeInfoArrayOutput { + return o.ApplyT(func(v *ReferenceList) ReferenceListScopeInfoArrayOutput { return v.ScopeInfos }).(ReferenceListScopeInfoArrayOutput) +} + +// Possible values: +// REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING +// REFERENCE_LIST_SYNTAX_TYPE_REGEX +// REFERENCE_LIST_SYNTAX_TYPE_CIDR +func (o ReferenceListOutput) SyntaxType() pulumi.StringOutput { + return o.ApplyT(func(v *ReferenceList) pulumi.StringOutput { return v.SyntaxType }).(pulumi.StringOutput) +} + +type ReferenceListArrayOutput struct{ *pulumi.OutputState } + +func (ReferenceListArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ReferenceList)(nil)).Elem() +} + +func (o ReferenceListArrayOutput) ToReferenceListArrayOutput() ReferenceListArrayOutput { + return o +} + +func (o ReferenceListArrayOutput) ToReferenceListArrayOutputWithContext(ctx context.Context) ReferenceListArrayOutput { + return o +} + +func (o ReferenceListArrayOutput) Index(i pulumi.IntInput) ReferenceListOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ReferenceList { + return vs[0].([]*ReferenceList)[vs[1].(int)] + }).(ReferenceListOutput) +} + +type ReferenceListMapOutput struct{ *pulumi.OutputState } + +func (ReferenceListMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ReferenceList)(nil)).Elem() +} + +func (o ReferenceListMapOutput) ToReferenceListMapOutput() ReferenceListMapOutput { + return o +} + +func (o ReferenceListMapOutput) ToReferenceListMapOutputWithContext(ctx context.Context) ReferenceListMapOutput { + return o +} + +func (o ReferenceListMapOutput) MapIndex(k pulumi.StringInput) ReferenceListOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ReferenceList { + return vs[0].(map[string]*ReferenceList)[vs[1].(string)] + }).(ReferenceListOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListInput)(nil)).Elem(), &ReferenceList{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListArrayInput)(nil)).Elem(), ReferenceListArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ReferenceListMapInput)(nil)).Elem(), ReferenceListMap{}) + pulumi.RegisterOutputType(ReferenceListOutput{}) + pulumi.RegisterOutputType(ReferenceListArrayOutput{}) + pulumi.RegisterOutputType(ReferenceListMapOutput{}) +} diff --git a/sdk/go/gcp/chronicle/rule.go b/sdk/go/gcp/chronicle/rule.go new file mode 100644 index 0000000000..59bb774b0b --- /dev/null +++ b/sdk/go/gcp/chronicle/rule.go @@ -0,0 +1,855 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package chronicle + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Chronicle Rule Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := chronicle.NewRule(ctx, "example", &chronicle.RuleArgs{ +// Location: pulumi.String("us"), +// Instance: pulumi.String("00000000-0000-0000-0000-000000000000"), +// DeletionPolicy: pulumi.String("DEFAULT"), +// Text: pulumi.String("rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Chronicle Rule With Force Deletion +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := chronicle.NewRule(ctx, "example", &chronicle.RuleArgs{ +// Location: pulumi.String("us"), +// Instance: pulumi.String("00000000-0000-0000-0000-000000000000"), +// DeletionPolicy: pulumi.String("FORCE"), +// Text: pulumi.String("rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Chronicle Rule With Data Access Scope +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/chronicle" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := chronicle.NewDataAccessScope(ctx, "data_access_scope_test", &chronicle.DataAccessScopeArgs{ +// Location: pulumi.String("us"), +// Instance: pulumi.String("00000000-0000-0000-0000-000000000000"), +// DataAccessScopeId: pulumi.String("scope-name"), +// Description: pulumi.String("scope-description"), +// AllowedDataAccessLabels: chronicle.DataAccessScopeAllowedDataAccessLabelArray{ +// &chronicle.DataAccessScopeAllowedDataAccessLabelArgs{ +// LogType: pulumi.String("GCP_CLOUDAUDIT"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// _, err = chronicle.NewRule(ctx, "example", &chronicle.RuleArgs{ +// Location: pulumi.String("us"), +// Instance: pulumi.String("00000000-0000-0000-0000-000000000000"), +// Scope: pulumi.Any(googleChronicleDataAccessScope.DataAccessScopeTest.Name), +// Text: pulumi.String("rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// Rule can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` +// +// * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` +// +// * `{{location}}/{{instance}}/{{rule_id}}` +// +// When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} +// ``` +type Rule struct { + pulumi.CustomResourceState + + // Output only. The run frequencies that are allowed for the rule. + // Populated in BASIC view and FULL view. + AllowedRunFrequencies pulumi.StringArrayOutput `pulumi:"allowedRunFrequencies"` + // Output only. The author of the rule. Extracted from the meta section of text. + // Populated in BASIC view and FULL view. + Author pulumi.StringOutput `pulumi:"author"` + // Output only. A list of a rule's corresponding compilation diagnostic messages + // such as compilation errors and compilation warnings. + // Populated in FULL view. + // Structure is documented below. + CompilationDiagnostics RuleCompilationDiagnosticArrayOutput `pulumi:"compilationDiagnostics"` + // Output only. The current compilation state of the rule. + // Populated in FULL view. + // Possible values: + // COMPILATION_STATE_UNSPECIFIED + // SUCCEEDED + // FAILED + CompilationState pulumi.StringOutput `pulumi:"compilationState"` + // Output only. The timestamp of when the rule was created. + // Populated in FULL view. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Output only. Resource names of the data tables used in this rule. + DataTables pulumi.StringArrayOutput `pulumi:"dataTables"` + // Policy to determine if the rule should be deleted forcefully. + // If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + // will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + // rule has no associated retrohunts, including completed retrohunts, and no + // associated detections. Regardless of this field's value, the rule + // deployment associated with this rule will also be deleted. + // Possible values: DEFAULT, FORCE + DeletionPolicy pulumi.StringPtrOutput `pulumi:"deletionPolicy"` + // The display name of the severity level. Extracted from the meta section of + // the rule text. + DisplayName pulumi.StringOutput `pulumi:"displayName"` + // The etag for this rule. + // If this is provided on update, the request will succeed if and only if it + // matches the server-computed value, and will fail with an ABORTED error + // otherwise. + // Populated in BASIC view and FULL view. + Etag pulumi.StringOutput `pulumi:"etag"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + // + // *** + Instance pulumi.StringOutput `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringOutput `pulumi:"location"` + // Output only. Additional metadata specified in the meta section of text. + // Populated in FULL view. + Metadata pulumi.StringMapOutput `pulumi:"metadata"` + // Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + Name pulumi.StringOutput `pulumi:"name"` + // Output only. Indicate the rule can run in near real time live rule. + // If this is true, the rule uses the near real time live rule when the run + // frequency is set to LIVE. + NearRealTimeLiveRuleEligible pulumi.BoolOutput `pulumi:"nearRealTimeLiveRuleEligible"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // Output only. Resource names of the reference lists used in this rule. + // Populated in FULL view. + ReferenceLists pulumi.StringArrayOutput `pulumi:"referenceLists"` + // Output only. The timestamp of when the rule revision was created. + // Populated in FULL, REVISION_METADATA_ONLY views. + RevisionCreateTime pulumi.StringOutput `pulumi:"revisionCreateTime"` + // Output only. The revision ID of the rule. + // A new revision is created whenever the rule text is changed in any way. + // Format: v_{10 digits}_{9 digits} + // Populated in REVISION_METADATA_ONLY view and FULL view. + RevisionId pulumi.StringOutput `pulumi:"revisionId"` + // Rule Id is the ID of the Rule. + RuleId pulumi.StringOutput `pulumi:"ruleId"` + // Resource name of the DataAccessScope bound to this rule. + // Populated in BASIC view and FULL view. + // If reference lists are used in the rule, validations will be performed + // against this scope to ensure that the reference lists are compatible with + // both the user's and the rule's scopes. + // The scope should be in the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + Scope pulumi.StringPtrOutput `pulumi:"scope"` + // (Output) + // Output only. The severity of a rule's compilation diagnostic. + // Possible values: + // SEVERITY_UNSPECIFIED + // WARNING + // ERROR + Severities RuleSeverityArrayOutput `pulumi:"severities"` + // The YARA-L content of the rule. + // Populated in FULL view. + Text pulumi.StringPtrOutput `pulumi:"text"` + // Possible values: + // RULE_TYPE_UNSPECIFIED + // SINGLE_EVENT + // MULTI_EVENT + Type pulumi.StringOutput `pulumi:"type"` +} + +// NewRule registers a new resource with the given unique name, arguments, and options. +func NewRule(ctx *pulumi.Context, + name string, args *RuleArgs, opts ...pulumi.ResourceOption) (*Rule, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Instance == nil { + return nil, errors.New("invalid value for required argument 'Instance'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Rule + err := ctx.RegisterResource("gcp:chronicle/rule:Rule", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRule gets an existing Rule resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRule(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RuleState, opts ...pulumi.ResourceOption) (*Rule, error) { + var resource Rule + err := ctx.ReadResource("gcp:chronicle/rule:Rule", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Rule resources. +type ruleState struct { + // Output only. The run frequencies that are allowed for the rule. + // Populated in BASIC view and FULL view. + AllowedRunFrequencies []string `pulumi:"allowedRunFrequencies"` + // Output only. The author of the rule. Extracted from the meta section of text. + // Populated in BASIC view and FULL view. + Author *string `pulumi:"author"` + // Output only. A list of a rule's corresponding compilation diagnostic messages + // such as compilation errors and compilation warnings. + // Populated in FULL view. + // Structure is documented below. + CompilationDiagnostics []RuleCompilationDiagnostic `pulumi:"compilationDiagnostics"` + // Output only. The current compilation state of the rule. + // Populated in FULL view. + // Possible values: + // COMPILATION_STATE_UNSPECIFIED + // SUCCEEDED + // FAILED + CompilationState *string `pulumi:"compilationState"` + // Output only. The timestamp of when the rule was created. + // Populated in FULL view. + CreateTime *string `pulumi:"createTime"` + // Output only. Resource names of the data tables used in this rule. + DataTables []string `pulumi:"dataTables"` + // Policy to determine if the rule should be deleted forcefully. + // If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + // will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + // rule has no associated retrohunts, including completed retrohunts, and no + // associated detections. Regardless of this field's value, the rule + // deployment associated with this rule will also be deleted. + // Possible values: DEFAULT, FORCE + DeletionPolicy *string `pulumi:"deletionPolicy"` + // The display name of the severity level. Extracted from the meta section of + // the rule text. + DisplayName *string `pulumi:"displayName"` + // The etag for this rule. + // If this is provided on update, the request will succeed if and only if it + // matches the server-computed value, and will fail with an ABORTED error + // otherwise. + // Populated in BASIC view and FULL view. + Etag *string `pulumi:"etag"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + // + // *** + Instance *string `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location *string `pulumi:"location"` + // Output only. Additional metadata specified in the meta section of text. + // Populated in FULL view. + Metadata map[string]string `pulumi:"metadata"` + // Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + Name *string `pulumi:"name"` + // Output only. Indicate the rule can run in near real time live rule. + // If this is true, the rule uses the near real time live rule when the run + // frequency is set to LIVE. + NearRealTimeLiveRuleEligible *bool `pulumi:"nearRealTimeLiveRuleEligible"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Output only. Resource names of the reference lists used in this rule. + // Populated in FULL view. + ReferenceLists []string `pulumi:"referenceLists"` + // Output only. The timestamp of when the rule revision was created. + // Populated in FULL, REVISION_METADATA_ONLY views. + RevisionCreateTime *string `pulumi:"revisionCreateTime"` + // Output only. The revision ID of the rule. + // A new revision is created whenever the rule text is changed in any way. + // Format: v_{10 digits}_{9 digits} + // Populated in REVISION_METADATA_ONLY view and FULL view. + RevisionId *string `pulumi:"revisionId"` + // Rule Id is the ID of the Rule. + RuleId *string `pulumi:"ruleId"` + // Resource name of the DataAccessScope bound to this rule. + // Populated in BASIC view and FULL view. + // If reference lists are used in the rule, validations will be performed + // against this scope to ensure that the reference lists are compatible with + // both the user's and the rule's scopes. + // The scope should be in the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + Scope *string `pulumi:"scope"` + // (Output) + // Output only. The severity of a rule's compilation diagnostic. + // Possible values: + // SEVERITY_UNSPECIFIED + // WARNING + // ERROR + Severities []RuleSeverity `pulumi:"severities"` + // The YARA-L content of the rule. + // Populated in FULL view. + Text *string `pulumi:"text"` + // Possible values: + // RULE_TYPE_UNSPECIFIED + // SINGLE_EVENT + // MULTI_EVENT + Type *string `pulumi:"type"` +} + +type RuleState struct { + // Output only. The run frequencies that are allowed for the rule. + // Populated in BASIC view and FULL view. + AllowedRunFrequencies pulumi.StringArrayInput + // Output only. The author of the rule. Extracted from the meta section of text. + // Populated in BASIC view and FULL view. + Author pulumi.StringPtrInput + // Output only. A list of a rule's corresponding compilation diagnostic messages + // such as compilation errors and compilation warnings. + // Populated in FULL view. + // Structure is documented below. + CompilationDiagnostics RuleCompilationDiagnosticArrayInput + // Output only. The current compilation state of the rule. + // Populated in FULL view. + // Possible values: + // COMPILATION_STATE_UNSPECIFIED + // SUCCEEDED + // FAILED + CompilationState pulumi.StringPtrInput + // Output only. The timestamp of when the rule was created. + // Populated in FULL view. + CreateTime pulumi.StringPtrInput + // Output only. Resource names of the data tables used in this rule. + DataTables pulumi.StringArrayInput + // Policy to determine if the rule should be deleted forcefully. + // If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + // will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + // rule has no associated retrohunts, including completed retrohunts, and no + // associated detections. Regardless of this field's value, the rule + // deployment associated with this rule will also be deleted. + // Possible values: DEFAULT, FORCE + DeletionPolicy pulumi.StringPtrInput + // The display name of the severity level. Extracted from the meta section of + // the rule text. + DisplayName pulumi.StringPtrInput + // The etag for this rule. + // If this is provided on update, the request will succeed if and only if it + // matches the server-computed value, and will fail with an ABORTED error + // otherwise. + // Populated in BASIC view and FULL view. + Etag pulumi.StringPtrInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + // + // *** + Instance pulumi.StringPtrInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringPtrInput + // Output only. Additional metadata specified in the meta section of text. + // Populated in FULL view. + Metadata pulumi.StringMapInput + // Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + Name pulumi.StringPtrInput + // Output only. Indicate the rule can run in near real time live rule. + // If this is true, the rule uses the near real time live rule when the run + // frequency is set to LIVE. + NearRealTimeLiveRuleEligible pulumi.BoolPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Output only. Resource names of the reference lists used in this rule. + // Populated in FULL view. + ReferenceLists pulumi.StringArrayInput + // Output only. The timestamp of when the rule revision was created. + // Populated in FULL, REVISION_METADATA_ONLY views. + RevisionCreateTime pulumi.StringPtrInput + // Output only. The revision ID of the rule. + // A new revision is created whenever the rule text is changed in any way. + // Format: v_{10 digits}_{9 digits} + // Populated in REVISION_METADATA_ONLY view and FULL view. + RevisionId pulumi.StringPtrInput + // Rule Id is the ID of the Rule. + RuleId pulumi.StringPtrInput + // Resource name of the DataAccessScope bound to this rule. + // Populated in BASIC view and FULL view. + // If reference lists are used in the rule, validations will be performed + // against this scope to ensure that the reference lists are compatible with + // both the user's and the rule's scopes. + // The scope should be in the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + Scope pulumi.StringPtrInput + // (Output) + // Output only. The severity of a rule's compilation diagnostic. + // Possible values: + // SEVERITY_UNSPECIFIED + // WARNING + // ERROR + Severities RuleSeverityArrayInput + // The YARA-L content of the rule. + // Populated in FULL view. + Text pulumi.StringPtrInput + // Possible values: + // RULE_TYPE_UNSPECIFIED + // SINGLE_EVENT + // MULTI_EVENT + Type pulumi.StringPtrInput +} + +func (RuleState) ElementType() reflect.Type { + return reflect.TypeOf((*ruleState)(nil)).Elem() +} + +type ruleArgs struct { + // Policy to determine if the rule should be deleted forcefully. + // If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + // will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + // rule has no associated retrohunts, including completed retrohunts, and no + // associated detections. Regardless of this field's value, the rule + // deployment associated with this rule will also be deleted. + // Possible values: DEFAULT, FORCE + DeletionPolicy *string `pulumi:"deletionPolicy"` + // The etag for this rule. + // If this is provided on update, the request will succeed if and only if it + // matches the server-computed value, and will fail with an ABORTED error + // otherwise. + // Populated in BASIC view and FULL view. + Etag *string `pulumi:"etag"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + // + // *** + Instance string `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location string `pulumi:"location"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Rule Id is the ID of the Rule. + RuleId *string `pulumi:"ruleId"` + // Resource name of the DataAccessScope bound to this rule. + // Populated in BASIC view and FULL view. + // If reference lists are used in the rule, validations will be performed + // against this scope to ensure that the reference lists are compatible with + // both the user's and the rule's scopes. + // The scope should be in the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + Scope *string `pulumi:"scope"` + // The YARA-L content of the rule. + // Populated in FULL view. + Text *string `pulumi:"text"` +} + +// The set of arguments for constructing a Rule resource. +type RuleArgs struct { + // Policy to determine if the rule should be deleted forcefully. + // If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + // will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + // rule has no associated retrohunts, including completed retrohunts, and no + // associated detections. Regardless of this field's value, the rule + // deployment associated with this rule will also be deleted. + // Possible values: DEFAULT, FORCE + DeletionPolicy pulumi.StringPtrInput + // The etag for this rule. + // If this is provided on update, the request will succeed if and only if it + // matches the server-computed value, and will fail with an ABORTED error + // otherwise. + // Populated in BASIC view and FULL view. + Etag pulumi.StringPtrInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + // + // *** + Instance pulumi.StringInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Rule Id is the ID of the Rule. + RuleId pulumi.StringPtrInput + // Resource name of the DataAccessScope bound to this rule. + // Populated in BASIC view and FULL view. + // If reference lists are used in the rule, validations will be performed + // against this scope to ensure that the reference lists are compatible with + // both the user's and the rule's scopes. + // The scope should be in the format: + // "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + Scope pulumi.StringPtrInput + // The YARA-L content of the rule. + // Populated in FULL view. + Text pulumi.StringPtrInput +} + +func (RuleArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ruleArgs)(nil)).Elem() +} + +type RuleInput interface { + pulumi.Input + + ToRuleOutput() RuleOutput + ToRuleOutputWithContext(ctx context.Context) RuleOutput +} + +func (*Rule) ElementType() reflect.Type { + return reflect.TypeOf((**Rule)(nil)).Elem() +} + +func (i *Rule) ToRuleOutput() RuleOutput { + return i.ToRuleOutputWithContext(context.Background()) +} + +func (i *Rule) ToRuleOutputWithContext(ctx context.Context) RuleOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleOutput) +} + +// RuleArrayInput is an input type that accepts RuleArray and RuleArrayOutput values. +// You can construct a concrete instance of `RuleArrayInput` via: +// +// RuleArray{ RuleArgs{...} } +type RuleArrayInput interface { + pulumi.Input + + ToRuleArrayOutput() RuleArrayOutput + ToRuleArrayOutputWithContext(context.Context) RuleArrayOutput +} + +type RuleArray []RuleInput + +func (RuleArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Rule)(nil)).Elem() +} + +func (i RuleArray) ToRuleArrayOutput() RuleArrayOutput { + return i.ToRuleArrayOutputWithContext(context.Background()) +} + +func (i RuleArray) ToRuleArrayOutputWithContext(ctx context.Context) RuleArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleArrayOutput) +} + +// RuleMapInput is an input type that accepts RuleMap and RuleMapOutput values. +// You can construct a concrete instance of `RuleMapInput` via: +// +// RuleMap{ "key": RuleArgs{...} } +type RuleMapInput interface { + pulumi.Input + + ToRuleMapOutput() RuleMapOutput + ToRuleMapOutputWithContext(context.Context) RuleMapOutput +} + +type RuleMap map[string]RuleInput + +func (RuleMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Rule)(nil)).Elem() +} + +func (i RuleMap) ToRuleMapOutput() RuleMapOutput { + return i.ToRuleMapOutputWithContext(context.Background()) +} + +func (i RuleMap) ToRuleMapOutputWithContext(ctx context.Context) RuleMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleMapOutput) +} + +type RuleOutput struct{ *pulumi.OutputState } + +func (RuleOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Rule)(nil)).Elem() +} + +func (o RuleOutput) ToRuleOutput() RuleOutput { + return o +} + +func (o RuleOutput) ToRuleOutputWithContext(ctx context.Context) RuleOutput { + return o +} + +// Output only. The run frequencies that are allowed for the rule. +// Populated in BASIC view and FULL view. +func (o RuleOutput) AllowedRunFrequencies() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Rule) pulumi.StringArrayOutput { return v.AllowedRunFrequencies }).(pulumi.StringArrayOutput) +} + +// Output only. The author of the rule. Extracted from the meta section of text. +// Populated in BASIC view and FULL view. +func (o RuleOutput) Author() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Author }).(pulumi.StringOutput) +} + +// Output only. A list of a rule's corresponding compilation diagnostic messages +// such as compilation errors and compilation warnings. +// Populated in FULL view. +// Structure is documented below. +func (o RuleOutput) CompilationDiagnostics() RuleCompilationDiagnosticArrayOutput { + return o.ApplyT(func(v *Rule) RuleCompilationDiagnosticArrayOutput { return v.CompilationDiagnostics }).(RuleCompilationDiagnosticArrayOutput) +} + +// Output only. The current compilation state of the rule. +// Populated in FULL view. +// Possible values: +// COMPILATION_STATE_UNSPECIFIED +// SUCCEEDED +// FAILED +func (o RuleOutput) CompilationState() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.CompilationState }).(pulumi.StringOutput) +} + +// Output only. The timestamp of when the rule was created. +// Populated in FULL view. +func (o RuleOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// Output only. Resource names of the data tables used in this rule. +func (o RuleOutput) DataTables() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Rule) pulumi.StringArrayOutput { return v.DataTables }).(pulumi.StringArrayOutput) +} + +// Policy to determine if the rule should be deleted forcefully. +// If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule +// will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the +// rule has no associated retrohunts, including completed retrohunts, and no +// associated detections. Regardless of this field's value, the rule +// deployment associated with this rule will also be deleted. +// Possible values: DEFAULT, FORCE +func (o RuleOutput) DeletionPolicy() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Rule) pulumi.StringPtrOutput { return v.DeletionPolicy }).(pulumi.StringPtrOutput) +} + +// The display name of the severity level. Extracted from the meta section of +// the rule text. +func (o RuleOutput) DisplayName() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.DisplayName }).(pulumi.StringOutput) +} + +// The etag for this rule. +// If this is provided on update, the request will succeed if and only if it +// matches the server-computed value, and will fail with an ABORTED error +// otherwise. +// Populated in BASIC view and FULL view. +func (o RuleOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// The unique identifier for the Chronicle instance, which is the same as the customer ID. +// +// *** +func (o RuleOutput) Instance() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Instance }).(pulumi.StringOutput) +} + +// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". +func (o RuleOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Output only. Additional metadata specified in the meta section of text. +// Populated in FULL view. +func (o RuleOutput) Metadata() pulumi.StringMapOutput { + return o.ApplyT(func(v *Rule) pulumi.StringMapOutput { return v.Metadata }).(pulumi.StringMapOutput) +} + +// Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. +// Format: +// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} +func (o RuleOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Output only. Indicate the rule can run in near real time live rule. +// If this is true, the rule uses the near real time live rule when the run +// frequency is set to LIVE. +func (o RuleOutput) NearRealTimeLiveRuleEligible() pulumi.BoolOutput { + return o.ApplyT(func(v *Rule) pulumi.BoolOutput { return v.NearRealTimeLiveRuleEligible }).(pulumi.BoolOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o RuleOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Output only. Resource names of the reference lists used in this rule. +// Populated in FULL view. +func (o RuleOutput) ReferenceLists() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Rule) pulumi.StringArrayOutput { return v.ReferenceLists }).(pulumi.StringArrayOutput) +} + +// Output only. The timestamp of when the rule revision was created. +// Populated in FULL, REVISION_METADATA_ONLY views. +func (o RuleOutput) RevisionCreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.RevisionCreateTime }).(pulumi.StringOutput) +} + +// Output only. The revision ID of the rule. +// A new revision is created whenever the rule text is changed in any way. +// Format: v_{10 digits}_{9 digits} +// Populated in REVISION_METADATA_ONLY view and FULL view. +func (o RuleOutput) RevisionId() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.RevisionId }).(pulumi.StringOutput) +} + +// Rule Id is the ID of the Rule. +func (o RuleOutput) RuleId() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.RuleId }).(pulumi.StringOutput) +} + +// Resource name of the DataAccessScope bound to this rule. +// Populated in BASIC view and FULL view. +// If reference lists are used in the rule, validations will be performed +// against this scope to ensure that the reference lists are compatible with +// both the user's and the rule's scopes. +// The scope should be in the format: +// "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". +func (o RuleOutput) Scope() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Rule) pulumi.StringPtrOutput { return v.Scope }).(pulumi.StringPtrOutput) +} + +// (Output) +// Output only. The severity of a rule's compilation diagnostic. +// Possible values: +// SEVERITY_UNSPECIFIED +// WARNING +// ERROR +func (o RuleOutput) Severities() RuleSeverityArrayOutput { + return o.ApplyT(func(v *Rule) RuleSeverityArrayOutput { return v.Severities }).(RuleSeverityArrayOutput) +} + +// The YARA-L content of the rule. +// Populated in FULL view. +func (o RuleOutput) Text() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Rule) pulumi.StringPtrOutput { return v.Text }).(pulumi.StringPtrOutput) +} + +// Possible values: +// RULE_TYPE_UNSPECIFIED +// SINGLE_EVENT +// MULTI_EVENT +func (o RuleOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v *Rule) pulumi.StringOutput { return v.Type }).(pulumi.StringOutput) +} + +type RuleArrayOutput struct{ *pulumi.OutputState } + +func (RuleArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Rule)(nil)).Elem() +} + +func (o RuleArrayOutput) ToRuleArrayOutput() RuleArrayOutput { + return o +} + +func (o RuleArrayOutput) ToRuleArrayOutputWithContext(ctx context.Context) RuleArrayOutput { + return o +} + +func (o RuleArrayOutput) Index(i pulumi.IntInput) RuleOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Rule { + return vs[0].([]*Rule)[vs[1].(int)] + }).(RuleOutput) +} + +type RuleMapOutput struct{ *pulumi.OutputState } + +func (RuleMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Rule)(nil)).Elem() +} + +func (o RuleMapOutput) ToRuleMapOutput() RuleMapOutput { + return o +} + +func (o RuleMapOutput) ToRuleMapOutputWithContext(ctx context.Context) RuleMapOutput { + return o +} + +func (o RuleMapOutput) MapIndex(k pulumi.StringInput) RuleOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Rule { + return vs[0].(map[string]*Rule)[vs[1].(string)] + }).(RuleOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RuleInput)(nil)).Elem(), &Rule{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleArrayInput)(nil)).Elem(), RuleArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleMapInput)(nil)).Elem(), RuleMap{}) + pulumi.RegisterOutputType(RuleOutput{}) + pulumi.RegisterOutputType(RuleArrayOutput{}) + pulumi.RegisterOutputType(RuleMapOutput{}) +} diff --git a/sdk/go/gcp/chronicle/ruleDeployment.go b/sdk/go/gcp/chronicle/ruleDeployment.go new file mode 100644 index 0000000000..7fa620dd4a --- /dev/null +++ b/sdk/go/gcp/chronicle/ruleDeployment.go @@ -0,0 +1,552 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package chronicle + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ## Import +// +// RuleDeployment can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` +// +// * `{{project}}/{{location}}/{{instance}}/{{rule}}` +// +// * `{{location}}/{{instance}}/{{rule}}` +// +// When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} +// ``` +// +// ```sh +// $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} +// ``` +type RuleDeployment struct { + pulumi.CustomResourceState + + // Whether detections resulting from this deployment should be considered + // alerts. + Alerting pulumi.BoolPtrOutput `pulumi:"alerting"` + // Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + ArchiveTime pulumi.StringOutput `pulumi:"archiveTime"` + // The archive state of the rule deployment. + // Cannot be set to true unless enabled is set to false. + // If set to true, alerting will automatically be set to false. + // If currently set to true, enabled, alerting, and runFrequency cannot be + // updated. + Archived pulumi.BoolPtrOutput `pulumi:"archived"` + // Output only. The names of the associated/chained consumer rules. Rules are considered + // consumers of this rule if their rule text explicitly filters on this rule's ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ConsumerRules pulumi.StringArrayOutput `pulumi:"consumerRules"` + // Whether the rule is currently deployed continuously against incoming data. + Enabled pulumi.BoolPtrOutput `pulumi:"enabled"` + // The execution state of the rule deployment. + // Possible values: + // DEFAULT + // LIMITED + // PAUSED + ExecutionState pulumi.StringOutput `pulumi:"executionState"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringOutput `pulumi:"instance"` + // Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + LastAlertStatusChangeTime pulumi.StringOutput `pulumi:"lastAlertStatusChangeTime"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringOutput `pulumi:"location"` + // The resource name of the rule deployment. + // Note that RuleDeployment is a child of the overall Rule, not any individual + // revision, so the resource ID segment for the Rule resource must not + // reference a specific revision. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + Name pulumi.StringOutput `pulumi:"name"` + // Output only. The names of the associated/chained producer rules. Rules are considered + // producers for this rule if this rule explicitly filters on their ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ProducerRules pulumi.StringArrayOutput `pulumi:"producerRules"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The Rule ID of the rule. + // + // *** + Rule pulumi.StringOutput `pulumi:"rule"` + // The run frequency of the rule deployment. + // Possible values: + // LIVE + // HOURLY + // DAILY + RunFrequency pulumi.StringPtrOutput `pulumi:"runFrequency"` +} + +// NewRuleDeployment registers a new resource with the given unique name, arguments, and options. +func NewRuleDeployment(ctx *pulumi.Context, + name string, args *RuleDeploymentArgs, opts ...pulumi.ResourceOption) (*RuleDeployment, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Instance == nil { + return nil, errors.New("invalid value for required argument 'Instance'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.Rule == nil { + return nil, errors.New("invalid value for required argument 'Rule'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource RuleDeployment + err := ctx.RegisterResource("gcp:chronicle/ruleDeployment:RuleDeployment", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRuleDeployment gets an existing RuleDeployment resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRuleDeployment(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RuleDeploymentState, opts ...pulumi.ResourceOption) (*RuleDeployment, error) { + var resource RuleDeployment + err := ctx.ReadResource("gcp:chronicle/ruleDeployment:RuleDeployment", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RuleDeployment resources. +type ruleDeploymentState struct { + // Whether detections resulting from this deployment should be considered + // alerts. + Alerting *bool `pulumi:"alerting"` + // Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + ArchiveTime *string `pulumi:"archiveTime"` + // The archive state of the rule deployment. + // Cannot be set to true unless enabled is set to false. + // If set to true, alerting will automatically be set to false. + // If currently set to true, enabled, alerting, and runFrequency cannot be + // updated. + Archived *bool `pulumi:"archived"` + // Output only. The names of the associated/chained consumer rules. Rules are considered + // consumers of this rule if their rule text explicitly filters on this rule's ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ConsumerRules []string `pulumi:"consumerRules"` + // Whether the rule is currently deployed continuously against incoming data. + Enabled *bool `pulumi:"enabled"` + // The execution state of the rule deployment. + // Possible values: + // DEFAULT + // LIMITED + // PAUSED + ExecutionState *string `pulumi:"executionState"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance *string `pulumi:"instance"` + // Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + LastAlertStatusChangeTime *string `pulumi:"lastAlertStatusChangeTime"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location *string `pulumi:"location"` + // The resource name of the rule deployment. + // Note that RuleDeployment is a child of the overall Rule, not any individual + // revision, so the resource ID segment for the Rule resource must not + // reference a specific revision. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + Name *string `pulumi:"name"` + // Output only. The names of the associated/chained producer rules. Rules are considered + // producers for this rule if this rule explicitly filters on their ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ProducerRules []string `pulumi:"producerRules"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The Rule ID of the rule. + // + // *** + Rule *string `pulumi:"rule"` + // The run frequency of the rule deployment. + // Possible values: + // LIVE + // HOURLY + // DAILY + RunFrequency *string `pulumi:"runFrequency"` +} + +type RuleDeploymentState struct { + // Whether detections resulting from this deployment should be considered + // alerts. + Alerting pulumi.BoolPtrInput + // Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + ArchiveTime pulumi.StringPtrInput + // The archive state of the rule deployment. + // Cannot be set to true unless enabled is set to false. + // If set to true, alerting will automatically be set to false. + // If currently set to true, enabled, alerting, and runFrequency cannot be + // updated. + Archived pulumi.BoolPtrInput + // Output only. The names of the associated/chained consumer rules. Rules are considered + // consumers of this rule if their rule text explicitly filters on this rule's ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ConsumerRules pulumi.StringArrayInput + // Whether the rule is currently deployed continuously against incoming data. + Enabled pulumi.BoolPtrInput + // The execution state of the rule deployment. + // Possible values: + // DEFAULT + // LIMITED + // PAUSED + ExecutionState pulumi.StringPtrInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringPtrInput + // Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + LastAlertStatusChangeTime pulumi.StringPtrInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringPtrInput + // The resource name of the rule deployment. + // Note that RuleDeployment is a child of the overall Rule, not any individual + // revision, so the resource ID segment for the Rule resource must not + // reference a specific revision. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + Name pulumi.StringPtrInput + // Output only. The names of the associated/chained producer rules. Rules are considered + // producers for this rule if this rule explicitly filters on their ruleid. + // Format: + // projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + ProducerRules pulumi.StringArrayInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The Rule ID of the rule. + // + // *** + Rule pulumi.StringPtrInput + // The run frequency of the rule deployment. + // Possible values: + // LIVE + // HOURLY + // DAILY + RunFrequency pulumi.StringPtrInput +} + +func (RuleDeploymentState) ElementType() reflect.Type { + return reflect.TypeOf((*ruleDeploymentState)(nil)).Elem() +} + +type ruleDeploymentArgs struct { + // Whether detections resulting from this deployment should be considered + // alerts. + Alerting *bool `pulumi:"alerting"` + // The archive state of the rule deployment. + // Cannot be set to true unless enabled is set to false. + // If set to true, alerting will automatically be set to false. + // If currently set to true, enabled, alerting, and runFrequency cannot be + // updated. + Archived *bool `pulumi:"archived"` + // Whether the rule is currently deployed continuously against incoming data. + Enabled *bool `pulumi:"enabled"` + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance string `pulumi:"instance"` + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location string `pulumi:"location"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The Rule ID of the rule. + // + // *** + Rule string `pulumi:"rule"` + // The run frequency of the rule deployment. + // Possible values: + // LIVE + // HOURLY + // DAILY + RunFrequency *string `pulumi:"runFrequency"` +} + +// The set of arguments for constructing a RuleDeployment resource. +type RuleDeploymentArgs struct { + // Whether detections resulting from this deployment should be considered + // alerts. + Alerting pulumi.BoolPtrInput + // The archive state of the rule deployment. + // Cannot be set to true unless enabled is set to false. + // If set to true, alerting will automatically be set to false. + // If currently set to true, enabled, alerting, and runFrequency cannot be + // updated. + Archived pulumi.BoolPtrInput + // Whether the rule is currently deployed continuously against incoming data. + Enabled pulumi.BoolPtrInput + // The unique identifier for the Chronicle instance, which is the same as the customer ID. + Instance pulumi.StringInput + // The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + Location pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The Rule ID of the rule. + // + // *** + Rule pulumi.StringInput + // The run frequency of the rule deployment. + // Possible values: + // LIVE + // HOURLY + // DAILY + RunFrequency pulumi.StringPtrInput +} + +func (RuleDeploymentArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ruleDeploymentArgs)(nil)).Elem() +} + +type RuleDeploymentInput interface { + pulumi.Input + + ToRuleDeploymentOutput() RuleDeploymentOutput + ToRuleDeploymentOutputWithContext(ctx context.Context) RuleDeploymentOutput +} + +func (*RuleDeployment) ElementType() reflect.Type { + return reflect.TypeOf((**RuleDeployment)(nil)).Elem() +} + +func (i *RuleDeployment) ToRuleDeploymentOutput() RuleDeploymentOutput { + return i.ToRuleDeploymentOutputWithContext(context.Background()) +} + +func (i *RuleDeployment) ToRuleDeploymentOutputWithContext(ctx context.Context) RuleDeploymentOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleDeploymentOutput) +} + +// RuleDeploymentArrayInput is an input type that accepts RuleDeploymentArray and RuleDeploymentArrayOutput values. +// You can construct a concrete instance of `RuleDeploymentArrayInput` via: +// +// RuleDeploymentArray{ RuleDeploymentArgs{...} } +type RuleDeploymentArrayInput interface { + pulumi.Input + + ToRuleDeploymentArrayOutput() RuleDeploymentArrayOutput + ToRuleDeploymentArrayOutputWithContext(context.Context) RuleDeploymentArrayOutput +} + +type RuleDeploymentArray []RuleDeploymentInput + +func (RuleDeploymentArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RuleDeployment)(nil)).Elem() +} + +func (i RuleDeploymentArray) ToRuleDeploymentArrayOutput() RuleDeploymentArrayOutput { + return i.ToRuleDeploymentArrayOutputWithContext(context.Background()) +} + +func (i RuleDeploymentArray) ToRuleDeploymentArrayOutputWithContext(ctx context.Context) RuleDeploymentArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleDeploymentArrayOutput) +} + +// RuleDeploymentMapInput is an input type that accepts RuleDeploymentMap and RuleDeploymentMapOutput values. +// You can construct a concrete instance of `RuleDeploymentMapInput` via: +// +// RuleDeploymentMap{ "key": RuleDeploymentArgs{...} } +type RuleDeploymentMapInput interface { + pulumi.Input + + ToRuleDeploymentMapOutput() RuleDeploymentMapOutput + ToRuleDeploymentMapOutputWithContext(context.Context) RuleDeploymentMapOutput +} + +type RuleDeploymentMap map[string]RuleDeploymentInput + +func (RuleDeploymentMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RuleDeployment)(nil)).Elem() +} + +func (i RuleDeploymentMap) ToRuleDeploymentMapOutput() RuleDeploymentMapOutput { + return i.ToRuleDeploymentMapOutputWithContext(context.Background()) +} + +func (i RuleDeploymentMap) ToRuleDeploymentMapOutputWithContext(ctx context.Context) RuleDeploymentMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuleDeploymentMapOutput) +} + +type RuleDeploymentOutput struct{ *pulumi.OutputState } + +func (RuleDeploymentOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuleDeployment)(nil)).Elem() +} + +func (o RuleDeploymentOutput) ToRuleDeploymentOutput() RuleDeploymentOutput { + return o +} + +func (o RuleDeploymentOutput) ToRuleDeploymentOutputWithContext(ctx context.Context) RuleDeploymentOutput { + return o +} + +// Whether detections resulting from this deployment should be considered +// alerts. +func (o RuleDeploymentOutput) Alerting() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.BoolPtrOutput { return v.Alerting }).(pulumi.BoolPtrOutput) +} + +// Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. +func (o RuleDeploymentOutput) ArchiveTime() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.ArchiveTime }).(pulumi.StringOutput) +} + +// The archive state of the rule deployment. +// Cannot be set to true unless enabled is set to false. +// If set to true, alerting will automatically be set to false. +// If currently set to true, enabled, alerting, and runFrequency cannot be +// updated. +func (o RuleDeploymentOutput) Archived() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.BoolPtrOutput { return v.Archived }).(pulumi.BoolPtrOutput) +} + +// Output only. The names of the associated/chained consumer rules. Rules are considered +// consumers of this rule if their rule text explicitly filters on this rule's ruleid. +// Format: +// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} +func (o RuleDeploymentOutput) ConsumerRules() pulumi.StringArrayOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringArrayOutput { return v.ConsumerRules }).(pulumi.StringArrayOutput) +} + +// Whether the rule is currently deployed continuously against incoming data. +func (o RuleDeploymentOutput) Enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.BoolPtrOutput { return v.Enabled }).(pulumi.BoolPtrOutput) +} + +// The execution state of the rule deployment. +// Possible values: +// DEFAULT +// LIMITED +// PAUSED +func (o RuleDeploymentOutput) ExecutionState() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.ExecutionState }).(pulumi.StringOutput) +} + +// The unique identifier for the Chronicle instance, which is the same as the customer ID. +func (o RuleDeploymentOutput) Instance() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.Instance }).(pulumi.StringOutput) +} + +// Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. +func (o RuleDeploymentOutput) LastAlertStatusChangeTime() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.LastAlertStatusChangeTime }).(pulumi.StringOutput) +} + +// The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". +func (o RuleDeploymentOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The resource name of the rule deployment. +// Note that RuleDeployment is a child of the overall Rule, not any individual +// revision, so the resource ID segment for the Rule resource must not +// reference a specific revision. +// Format: +// projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment +func (o RuleDeploymentOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Output only. The names of the associated/chained producer rules. Rules are considered +// producers for this rule if this rule explicitly filters on their ruleid. +// Format: +// projects/{project}/locations/{location}/instances/{instance}/rules/{rule} +func (o RuleDeploymentOutput) ProducerRules() pulumi.StringArrayOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringArrayOutput { return v.ProducerRules }).(pulumi.StringArrayOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o RuleDeploymentOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The Rule ID of the rule. +// +// *** +func (o RuleDeploymentOutput) Rule() pulumi.StringOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringOutput { return v.Rule }).(pulumi.StringOutput) +} + +// The run frequency of the rule deployment. +// Possible values: +// LIVE +// HOURLY +// DAILY +func (o RuleDeploymentOutput) RunFrequency() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuleDeployment) pulumi.StringPtrOutput { return v.RunFrequency }).(pulumi.StringPtrOutput) +} + +type RuleDeploymentArrayOutput struct{ *pulumi.OutputState } + +func (RuleDeploymentArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RuleDeployment)(nil)).Elem() +} + +func (o RuleDeploymentArrayOutput) ToRuleDeploymentArrayOutput() RuleDeploymentArrayOutput { + return o +} + +func (o RuleDeploymentArrayOutput) ToRuleDeploymentArrayOutputWithContext(ctx context.Context) RuleDeploymentArrayOutput { + return o +} + +func (o RuleDeploymentArrayOutput) Index(i pulumi.IntInput) RuleDeploymentOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RuleDeployment { + return vs[0].([]*RuleDeployment)[vs[1].(int)] + }).(RuleDeploymentOutput) +} + +type RuleDeploymentMapOutput struct{ *pulumi.OutputState } + +func (RuleDeploymentMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RuleDeployment)(nil)).Elem() +} + +func (o RuleDeploymentMapOutput) ToRuleDeploymentMapOutput() RuleDeploymentMapOutput { + return o +} + +func (o RuleDeploymentMapOutput) ToRuleDeploymentMapOutputWithContext(ctx context.Context) RuleDeploymentMapOutput { + return o +} + +func (o RuleDeploymentMapOutput) MapIndex(k pulumi.StringInput) RuleDeploymentOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RuleDeployment { + return vs[0].(map[string]*RuleDeployment)[vs[1].(string)] + }).(RuleDeploymentOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RuleDeploymentInput)(nil)).Elem(), &RuleDeployment{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleDeploymentArrayInput)(nil)).Elem(), RuleDeploymentArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuleDeploymentMapInput)(nil)).Elem(), RuleDeploymentMap{}) + pulumi.RegisterOutputType(RuleDeploymentOutput{}) + pulumi.RegisterOutputType(RuleDeploymentArrayOutput{}) + pulumi.RegisterOutputType(RuleDeploymentMapOutput{}) +} diff --git a/sdk/go/gcp/colab/init.go b/sdk/go/gcp/colab/init.go new file mode 100644 index 0000000000..8965431ab2 --- /dev/null +++ b/sdk/go/gcp/colab/init.go @@ -0,0 +1,44 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package colab + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "gcp:colab/runtimeTemplate:RuntimeTemplate": + r = &RuntimeTemplate{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "colab/runtimeTemplate", + &module{version}, + ) +} diff --git a/sdk/go/gcp/colab/pulumiTypes.go b/sdk/go/gcp/colab/pulumiTypes.go new file mode 100644 index 0000000000..d182592abc --- /dev/null +++ b/sdk/go/gcp/colab/pulumiTypes.go @@ -0,0 +1,1099 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package colab + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type RuntimeTemplateDataPersistentDiskSpec struct { + // The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + DiskSizeGb *string `pulumi:"diskSizeGb"` + // The type of the persistent disk. + DiskType *string `pulumi:"diskType"` +} + +// RuntimeTemplateDataPersistentDiskSpecInput is an input type that accepts RuntimeTemplateDataPersistentDiskSpecArgs and RuntimeTemplateDataPersistentDiskSpecOutput values. +// You can construct a concrete instance of `RuntimeTemplateDataPersistentDiskSpecInput` via: +// +// RuntimeTemplateDataPersistentDiskSpecArgs{...} +type RuntimeTemplateDataPersistentDiskSpecInput interface { + pulumi.Input + + ToRuntimeTemplateDataPersistentDiskSpecOutput() RuntimeTemplateDataPersistentDiskSpecOutput + ToRuntimeTemplateDataPersistentDiskSpecOutputWithContext(context.Context) RuntimeTemplateDataPersistentDiskSpecOutput +} + +type RuntimeTemplateDataPersistentDiskSpecArgs struct { + // The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + DiskSizeGb pulumi.StringPtrInput `pulumi:"diskSizeGb"` + // The type of the persistent disk. + DiskType pulumi.StringPtrInput `pulumi:"diskType"` +} + +func (RuntimeTemplateDataPersistentDiskSpecArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateDataPersistentDiskSpec)(nil)).Elem() +} + +func (i RuntimeTemplateDataPersistentDiskSpecArgs) ToRuntimeTemplateDataPersistentDiskSpecOutput() RuntimeTemplateDataPersistentDiskSpecOutput { + return i.ToRuntimeTemplateDataPersistentDiskSpecOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateDataPersistentDiskSpecArgs) ToRuntimeTemplateDataPersistentDiskSpecOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateDataPersistentDiskSpecOutput) +} + +func (i RuntimeTemplateDataPersistentDiskSpecArgs) ToRuntimeTemplateDataPersistentDiskSpecPtrOutput() RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return i.ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateDataPersistentDiskSpecArgs) ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateDataPersistentDiskSpecOutput).ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(ctx) +} + +// RuntimeTemplateDataPersistentDiskSpecPtrInput is an input type that accepts RuntimeTemplateDataPersistentDiskSpecArgs, RuntimeTemplateDataPersistentDiskSpecPtr and RuntimeTemplateDataPersistentDiskSpecPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateDataPersistentDiskSpecPtrInput` via: +// +// RuntimeTemplateDataPersistentDiskSpecArgs{...} +// +// or: +// +// nil +type RuntimeTemplateDataPersistentDiskSpecPtrInput interface { + pulumi.Input + + ToRuntimeTemplateDataPersistentDiskSpecPtrOutput() RuntimeTemplateDataPersistentDiskSpecPtrOutput + ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(context.Context) RuntimeTemplateDataPersistentDiskSpecPtrOutput +} + +type runtimeTemplateDataPersistentDiskSpecPtrType RuntimeTemplateDataPersistentDiskSpecArgs + +func RuntimeTemplateDataPersistentDiskSpecPtr(v *RuntimeTemplateDataPersistentDiskSpecArgs) RuntimeTemplateDataPersistentDiskSpecPtrInput { + return (*runtimeTemplateDataPersistentDiskSpecPtrType)(v) +} + +func (*runtimeTemplateDataPersistentDiskSpecPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateDataPersistentDiskSpec)(nil)).Elem() +} + +func (i *runtimeTemplateDataPersistentDiskSpecPtrType) ToRuntimeTemplateDataPersistentDiskSpecPtrOutput() RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return i.ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateDataPersistentDiskSpecPtrType) ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateDataPersistentDiskSpecPtrOutput) +} + +type RuntimeTemplateDataPersistentDiskSpecOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateDataPersistentDiskSpecOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateDataPersistentDiskSpec)(nil)).Elem() +} + +func (o RuntimeTemplateDataPersistentDiskSpecOutput) ToRuntimeTemplateDataPersistentDiskSpecOutput() RuntimeTemplateDataPersistentDiskSpecOutput { + return o +} + +func (o RuntimeTemplateDataPersistentDiskSpecOutput) ToRuntimeTemplateDataPersistentDiskSpecOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecOutput { + return o +} + +func (o RuntimeTemplateDataPersistentDiskSpecOutput) ToRuntimeTemplateDataPersistentDiskSpecPtrOutput() RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return o.ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateDataPersistentDiskSpecOutput) ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateDataPersistentDiskSpec) *RuntimeTemplateDataPersistentDiskSpec { + return &v + }).(RuntimeTemplateDataPersistentDiskSpecPtrOutput) +} + +// The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. +func (o RuntimeTemplateDataPersistentDiskSpecOutput) DiskSizeGb() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateDataPersistentDiskSpec) *string { return v.DiskSizeGb }).(pulumi.StringPtrOutput) +} + +// The type of the persistent disk. +func (o RuntimeTemplateDataPersistentDiskSpecOutput) DiskType() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateDataPersistentDiskSpec) *string { return v.DiskType }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateDataPersistentDiskSpecPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateDataPersistentDiskSpecPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateDataPersistentDiskSpec)(nil)).Elem() +} + +func (o RuntimeTemplateDataPersistentDiskSpecPtrOutput) ToRuntimeTemplateDataPersistentDiskSpecPtrOutput() RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return o +} + +func (o RuntimeTemplateDataPersistentDiskSpecPtrOutput) ToRuntimeTemplateDataPersistentDiskSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateDataPersistentDiskSpecPtrOutput { + return o +} + +func (o RuntimeTemplateDataPersistentDiskSpecPtrOutput) Elem() RuntimeTemplateDataPersistentDiskSpecOutput { + return o.ApplyT(func(v *RuntimeTemplateDataPersistentDiskSpec) RuntimeTemplateDataPersistentDiskSpec { + if v != nil { + return *v + } + var ret RuntimeTemplateDataPersistentDiskSpec + return ret + }).(RuntimeTemplateDataPersistentDiskSpecOutput) +} + +// The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. +func (o RuntimeTemplateDataPersistentDiskSpecPtrOutput) DiskSizeGb() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateDataPersistentDiskSpec) *string { + if v == nil { + return nil + } + return v.DiskSizeGb + }).(pulumi.StringPtrOutput) +} + +// The type of the persistent disk. +func (o RuntimeTemplateDataPersistentDiskSpecPtrOutput) DiskType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateDataPersistentDiskSpec) *string { + if v == nil { + return nil + } + return v.DiskType + }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateEncryptionSpec struct { + // The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + KmsKeyName *string `pulumi:"kmsKeyName"` +} + +// RuntimeTemplateEncryptionSpecInput is an input type that accepts RuntimeTemplateEncryptionSpecArgs and RuntimeTemplateEncryptionSpecOutput values. +// You can construct a concrete instance of `RuntimeTemplateEncryptionSpecInput` via: +// +// RuntimeTemplateEncryptionSpecArgs{...} +type RuntimeTemplateEncryptionSpecInput interface { + pulumi.Input + + ToRuntimeTemplateEncryptionSpecOutput() RuntimeTemplateEncryptionSpecOutput + ToRuntimeTemplateEncryptionSpecOutputWithContext(context.Context) RuntimeTemplateEncryptionSpecOutput +} + +type RuntimeTemplateEncryptionSpecArgs struct { + // The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + KmsKeyName pulumi.StringPtrInput `pulumi:"kmsKeyName"` +} + +func (RuntimeTemplateEncryptionSpecArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateEncryptionSpec)(nil)).Elem() +} + +func (i RuntimeTemplateEncryptionSpecArgs) ToRuntimeTemplateEncryptionSpecOutput() RuntimeTemplateEncryptionSpecOutput { + return i.ToRuntimeTemplateEncryptionSpecOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateEncryptionSpecArgs) ToRuntimeTemplateEncryptionSpecOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEncryptionSpecOutput) +} + +func (i RuntimeTemplateEncryptionSpecArgs) ToRuntimeTemplateEncryptionSpecPtrOutput() RuntimeTemplateEncryptionSpecPtrOutput { + return i.ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateEncryptionSpecArgs) ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEncryptionSpecOutput).ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(ctx) +} + +// RuntimeTemplateEncryptionSpecPtrInput is an input type that accepts RuntimeTemplateEncryptionSpecArgs, RuntimeTemplateEncryptionSpecPtr and RuntimeTemplateEncryptionSpecPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateEncryptionSpecPtrInput` via: +// +// RuntimeTemplateEncryptionSpecArgs{...} +// +// or: +// +// nil +type RuntimeTemplateEncryptionSpecPtrInput interface { + pulumi.Input + + ToRuntimeTemplateEncryptionSpecPtrOutput() RuntimeTemplateEncryptionSpecPtrOutput + ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(context.Context) RuntimeTemplateEncryptionSpecPtrOutput +} + +type runtimeTemplateEncryptionSpecPtrType RuntimeTemplateEncryptionSpecArgs + +func RuntimeTemplateEncryptionSpecPtr(v *RuntimeTemplateEncryptionSpecArgs) RuntimeTemplateEncryptionSpecPtrInput { + return (*runtimeTemplateEncryptionSpecPtrType)(v) +} + +func (*runtimeTemplateEncryptionSpecPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateEncryptionSpec)(nil)).Elem() +} + +func (i *runtimeTemplateEncryptionSpecPtrType) ToRuntimeTemplateEncryptionSpecPtrOutput() RuntimeTemplateEncryptionSpecPtrOutput { + return i.ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateEncryptionSpecPtrType) ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEncryptionSpecPtrOutput) +} + +type RuntimeTemplateEncryptionSpecOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateEncryptionSpecOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateEncryptionSpec)(nil)).Elem() +} + +func (o RuntimeTemplateEncryptionSpecOutput) ToRuntimeTemplateEncryptionSpecOutput() RuntimeTemplateEncryptionSpecOutput { + return o +} + +func (o RuntimeTemplateEncryptionSpecOutput) ToRuntimeTemplateEncryptionSpecOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecOutput { + return o +} + +func (o RuntimeTemplateEncryptionSpecOutput) ToRuntimeTemplateEncryptionSpecPtrOutput() RuntimeTemplateEncryptionSpecPtrOutput { + return o.ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateEncryptionSpecOutput) ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateEncryptionSpec) *RuntimeTemplateEncryptionSpec { + return &v + }).(RuntimeTemplateEncryptionSpecPtrOutput) +} + +// The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. +func (o RuntimeTemplateEncryptionSpecOutput) KmsKeyName() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateEncryptionSpec) *string { return v.KmsKeyName }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateEncryptionSpecPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateEncryptionSpecPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateEncryptionSpec)(nil)).Elem() +} + +func (o RuntimeTemplateEncryptionSpecPtrOutput) ToRuntimeTemplateEncryptionSpecPtrOutput() RuntimeTemplateEncryptionSpecPtrOutput { + return o +} + +func (o RuntimeTemplateEncryptionSpecPtrOutput) ToRuntimeTemplateEncryptionSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateEncryptionSpecPtrOutput { + return o +} + +func (o RuntimeTemplateEncryptionSpecPtrOutput) Elem() RuntimeTemplateEncryptionSpecOutput { + return o.ApplyT(func(v *RuntimeTemplateEncryptionSpec) RuntimeTemplateEncryptionSpec { + if v != nil { + return *v + } + var ret RuntimeTemplateEncryptionSpec + return ret + }).(RuntimeTemplateEncryptionSpecOutput) +} + +// The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. +func (o RuntimeTemplateEncryptionSpecPtrOutput) KmsKeyName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateEncryptionSpec) *string { + if v == nil { + return nil + } + return v.KmsKeyName + }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateEucConfig struct { + // Disable end user credential access for the runtime. + EucDisabled *bool `pulumi:"eucDisabled"` +} + +// RuntimeTemplateEucConfigInput is an input type that accepts RuntimeTemplateEucConfigArgs and RuntimeTemplateEucConfigOutput values. +// You can construct a concrete instance of `RuntimeTemplateEucConfigInput` via: +// +// RuntimeTemplateEucConfigArgs{...} +type RuntimeTemplateEucConfigInput interface { + pulumi.Input + + ToRuntimeTemplateEucConfigOutput() RuntimeTemplateEucConfigOutput + ToRuntimeTemplateEucConfigOutputWithContext(context.Context) RuntimeTemplateEucConfigOutput +} + +type RuntimeTemplateEucConfigArgs struct { + // Disable end user credential access for the runtime. + EucDisabled pulumi.BoolPtrInput `pulumi:"eucDisabled"` +} + +func (RuntimeTemplateEucConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateEucConfig)(nil)).Elem() +} + +func (i RuntimeTemplateEucConfigArgs) ToRuntimeTemplateEucConfigOutput() RuntimeTemplateEucConfigOutput { + return i.ToRuntimeTemplateEucConfigOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateEucConfigArgs) ToRuntimeTemplateEucConfigOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEucConfigOutput) +} + +func (i RuntimeTemplateEucConfigArgs) ToRuntimeTemplateEucConfigPtrOutput() RuntimeTemplateEucConfigPtrOutput { + return i.ToRuntimeTemplateEucConfigPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateEucConfigArgs) ToRuntimeTemplateEucConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEucConfigOutput).ToRuntimeTemplateEucConfigPtrOutputWithContext(ctx) +} + +// RuntimeTemplateEucConfigPtrInput is an input type that accepts RuntimeTemplateEucConfigArgs, RuntimeTemplateEucConfigPtr and RuntimeTemplateEucConfigPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateEucConfigPtrInput` via: +// +// RuntimeTemplateEucConfigArgs{...} +// +// or: +// +// nil +type RuntimeTemplateEucConfigPtrInput interface { + pulumi.Input + + ToRuntimeTemplateEucConfigPtrOutput() RuntimeTemplateEucConfigPtrOutput + ToRuntimeTemplateEucConfigPtrOutputWithContext(context.Context) RuntimeTemplateEucConfigPtrOutput +} + +type runtimeTemplateEucConfigPtrType RuntimeTemplateEucConfigArgs + +func RuntimeTemplateEucConfigPtr(v *RuntimeTemplateEucConfigArgs) RuntimeTemplateEucConfigPtrInput { + return (*runtimeTemplateEucConfigPtrType)(v) +} + +func (*runtimeTemplateEucConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateEucConfig)(nil)).Elem() +} + +func (i *runtimeTemplateEucConfigPtrType) ToRuntimeTemplateEucConfigPtrOutput() RuntimeTemplateEucConfigPtrOutput { + return i.ToRuntimeTemplateEucConfigPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateEucConfigPtrType) ToRuntimeTemplateEucConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateEucConfigPtrOutput) +} + +type RuntimeTemplateEucConfigOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateEucConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateEucConfig)(nil)).Elem() +} + +func (o RuntimeTemplateEucConfigOutput) ToRuntimeTemplateEucConfigOutput() RuntimeTemplateEucConfigOutput { + return o +} + +func (o RuntimeTemplateEucConfigOutput) ToRuntimeTemplateEucConfigOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigOutput { + return o +} + +func (o RuntimeTemplateEucConfigOutput) ToRuntimeTemplateEucConfigPtrOutput() RuntimeTemplateEucConfigPtrOutput { + return o.ToRuntimeTemplateEucConfigPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateEucConfigOutput) ToRuntimeTemplateEucConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateEucConfig) *RuntimeTemplateEucConfig { + return &v + }).(RuntimeTemplateEucConfigPtrOutput) +} + +// Disable end user credential access for the runtime. +func (o RuntimeTemplateEucConfigOutput) EucDisabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v RuntimeTemplateEucConfig) *bool { return v.EucDisabled }).(pulumi.BoolPtrOutput) +} + +type RuntimeTemplateEucConfigPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateEucConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateEucConfig)(nil)).Elem() +} + +func (o RuntimeTemplateEucConfigPtrOutput) ToRuntimeTemplateEucConfigPtrOutput() RuntimeTemplateEucConfigPtrOutput { + return o +} + +func (o RuntimeTemplateEucConfigPtrOutput) ToRuntimeTemplateEucConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateEucConfigPtrOutput { + return o +} + +func (o RuntimeTemplateEucConfigPtrOutput) Elem() RuntimeTemplateEucConfigOutput { + return o.ApplyT(func(v *RuntimeTemplateEucConfig) RuntimeTemplateEucConfig { + if v != nil { + return *v + } + var ret RuntimeTemplateEucConfig + return ret + }).(RuntimeTemplateEucConfigOutput) +} + +// Disable end user credential access for the runtime. +func (o RuntimeTemplateEucConfigPtrOutput) EucDisabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateEucConfig) *bool { + if v == nil { + return nil + } + return v.EucDisabled + }).(pulumi.BoolPtrOutput) +} + +type RuntimeTemplateIdleShutdownConfig struct { + // The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + IdleTimeout *string `pulumi:"idleTimeout"` +} + +// RuntimeTemplateIdleShutdownConfigInput is an input type that accepts RuntimeTemplateIdleShutdownConfigArgs and RuntimeTemplateIdleShutdownConfigOutput values. +// You can construct a concrete instance of `RuntimeTemplateIdleShutdownConfigInput` via: +// +// RuntimeTemplateIdleShutdownConfigArgs{...} +type RuntimeTemplateIdleShutdownConfigInput interface { + pulumi.Input + + ToRuntimeTemplateIdleShutdownConfigOutput() RuntimeTemplateIdleShutdownConfigOutput + ToRuntimeTemplateIdleShutdownConfigOutputWithContext(context.Context) RuntimeTemplateIdleShutdownConfigOutput +} + +type RuntimeTemplateIdleShutdownConfigArgs struct { + // The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + IdleTimeout pulumi.StringPtrInput `pulumi:"idleTimeout"` +} + +func (RuntimeTemplateIdleShutdownConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateIdleShutdownConfig)(nil)).Elem() +} + +func (i RuntimeTemplateIdleShutdownConfigArgs) ToRuntimeTemplateIdleShutdownConfigOutput() RuntimeTemplateIdleShutdownConfigOutput { + return i.ToRuntimeTemplateIdleShutdownConfigOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateIdleShutdownConfigArgs) ToRuntimeTemplateIdleShutdownConfigOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateIdleShutdownConfigOutput) +} + +func (i RuntimeTemplateIdleShutdownConfigArgs) ToRuntimeTemplateIdleShutdownConfigPtrOutput() RuntimeTemplateIdleShutdownConfigPtrOutput { + return i.ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateIdleShutdownConfigArgs) ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateIdleShutdownConfigOutput).ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(ctx) +} + +// RuntimeTemplateIdleShutdownConfigPtrInput is an input type that accepts RuntimeTemplateIdleShutdownConfigArgs, RuntimeTemplateIdleShutdownConfigPtr and RuntimeTemplateIdleShutdownConfigPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateIdleShutdownConfigPtrInput` via: +// +// RuntimeTemplateIdleShutdownConfigArgs{...} +// +// or: +// +// nil +type RuntimeTemplateIdleShutdownConfigPtrInput interface { + pulumi.Input + + ToRuntimeTemplateIdleShutdownConfigPtrOutput() RuntimeTemplateIdleShutdownConfigPtrOutput + ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(context.Context) RuntimeTemplateIdleShutdownConfigPtrOutput +} + +type runtimeTemplateIdleShutdownConfigPtrType RuntimeTemplateIdleShutdownConfigArgs + +func RuntimeTemplateIdleShutdownConfigPtr(v *RuntimeTemplateIdleShutdownConfigArgs) RuntimeTemplateIdleShutdownConfigPtrInput { + return (*runtimeTemplateIdleShutdownConfigPtrType)(v) +} + +func (*runtimeTemplateIdleShutdownConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateIdleShutdownConfig)(nil)).Elem() +} + +func (i *runtimeTemplateIdleShutdownConfigPtrType) ToRuntimeTemplateIdleShutdownConfigPtrOutput() RuntimeTemplateIdleShutdownConfigPtrOutput { + return i.ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateIdleShutdownConfigPtrType) ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateIdleShutdownConfigPtrOutput) +} + +type RuntimeTemplateIdleShutdownConfigOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateIdleShutdownConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateIdleShutdownConfig)(nil)).Elem() +} + +func (o RuntimeTemplateIdleShutdownConfigOutput) ToRuntimeTemplateIdleShutdownConfigOutput() RuntimeTemplateIdleShutdownConfigOutput { + return o +} + +func (o RuntimeTemplateIdleShutdownConfigOutput) ToRuntimeTemplateIdleShutdownConfigOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigOutput { + return o +} + +func (o RuntimeTemplateIdleShutdownConfigOutput) ToRuntimeTemplateIdleShutdownConfigPtrOutput() RuntimeTemplateIdleShutdownConfigPtrOutput { + return o.ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateIdleShutdownConfigOutput) ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateIdleShutdownConfig) *RuntimeTemplateIdleShutdownConfig { + return &v + }).(RuntimeTemplateIdleShutdownConfigPtrOutput) +} + +// The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. +func (o RuntimeTemplateIdleShutdownConfigOutput) IdleTimeout() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateIdleShutdownConfig) *string { return v.IdleTimeout }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateIdleShutdownConfigPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateIdleShutdownConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateIdleShutdownConfig)(nil)).Elem() +} + +func (o RuntimeTemplateIdleShutdownConfigPtrOutput) ToRuntimeTemplateIdleShutdownConfigPtrOutput() RuntimeTemplateIdleShutdownConfigPtrOutput { + return o +} + +func (o RuntimeTemplateIdleShutdownConfigPtrOutput) ToRuntimeTemplateIdleShutdownConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateIdleShutdownConfigPtrOutput { + return o +} + +func (o RuntimeTemplateIdleShutdownConfigPtrOutput) Elem() RuntimeTemplateIdleShutdownConfigOutput { + return o.ApplyT(func(v *RuntimeTemplateIdleShutdownConfig) RuntimeTemplateIdleShutdownConfig { + if v != nil { + return *v + } + var ret RuntimeTemplateIdleShutdownConfig + return ret + }).(RuntimeTemplateIdleShutdownConfigOutput) +} + +// The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. +func (o RuntimeTemplateIdleShutdownConfigPtrOutput) IdleTimeout() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateIdleShutdownConfig) *string { + if v == nil { + return nil + } + return v.IdleTimeout + }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateMachineSpec struct { + // The number of accelerators used by the runtime. + AcceleratorCount *int `pulumi:"acceleratorCount"` + // The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + AcceleratorType *string `pulumi:"acceleratorType"` + // The Compute Engine machine type selected for the runtime. + MachineType *string `pulumi:"machineType"` +} + +// RuntimeTemplateMachineSpecInput is an input type that accepts RuntimeTemplateMachineSpecArgs and RuntimeTemplateMachineSpecOutput values. +// You can construct a concrete instance of `RuntimeTemplateMachineSpecInput` via: +// +// RuntimeTemplateMachineSpecArgs{...} +type RuntimeTemplateMachineSpecInput interface { + pulumi.Input + + ToRuntimeTemplateMachineSpecOutput() RuntimeTemplateMachineSpecOutput + ToRuntimeTemplateMachineSpecOutputWithContext(context.Context) RuntimeTemplateMachineSpecOutput +} + +type RuntimeTemplateMachineSpecArgs struct { + // The number of accelerators used by the runtime. + AcceleratorCount pulumi.IntPtrInput `pulumi:"acceleratorCount"` + // The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + AcceleratorType pulumi.StringPtrInput `pulumi:"acceleratorType"` + // The Compute Engine machine type selected for the runtime. + MachineType pulumi.StringPtrInput `pulumi:"machineType"` +} + +func (RuntimeTemplateMachineSpecArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateMachineSpec)(nil)).Elem() +} + +func (i RuntimeTemplateMachineSpecArgs) ToRuntimeTemplateMachineSpecOutput() RuntimeTemplateMachineSpecOutput { + return i.ToRuntimeTemplateMachineSpecOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateMachineSpecArgs) ToRuntimeTemplateMachineSpecOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateMachineSpecOutput) +} + +func (i RuntimeTemplateMachineSpecArgs) ToRuntimeTemplateMachineSpecPtrOutput() RuntimeTemplateMachineSpecPtrOutput { + return i.ToRuntimeTemplateMachineSpecPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateMachineSpecArgs) ToRuntimeTemplateMachineSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateMachineSpecOutput).ToRuntimeTemplateMachineSpecPtrOutputWithContext(ctx) +} + +// RuntimeTemplateMachineSpecPtrInput is an input type that accepts RuntimeTemplateMachineSpecArgs, RuntimeTemplateMachineSpecPtr and RuntimeTemplateMachineSpecPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateMachineSpecPtrInput` via: +// +// RuntimeTemplateMachineSpecArgs{...} +// +// or: +// +// nil +type RuntimeTemplateMachineSpecPtrInput interface { + pulumi.Input + + ToRuntimeTemplateMachineSpecPtrOutput() RuntimeTemplateMachineSpecPtrOutput + ToRuntimeTemplateMachineSpecPtrOutputWithContext(context.Context) RuntimeTemplateMachineSpecPtrOutput +} + +type runtimeTemplateMachineSpecPtrType RuntimeTemplateMachineSpecArgs + +func RuntimeTemplateMachineSpecPtr(v *RuntimeTemplateMachineSpecArgs) RuntimeTemplateMachineSpecPtrInput { + return (*runtimeTemplateMachineSpecPtrType)(v) +} + +func (*runtimeTemplateMachineSpecPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateMachineSpec)(nil)).Elem() +} + +func (i *runtimeTemplateMachineSpecPtrType) ToRuntimeTemplateMachineSpecPtrOutput() RuntimeTemplateMachineSpecPtrOutput { + return i.ToRuntimeTemplateMachineSpecPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateMachineSpecPtrType) ToRuntimeTemplateMachineSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateMachineSpecPtrOutput) +} + +type RuntimeTemplateMachineSpecOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateMachineSpecOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateMachineSpec)(nil)).Elem() +} + +func (o RuntimeTemplateMachineSpecOutput) ToRuntimeTemplateMachineSpecOutput() RuntimeTemplateMachineSpecOutput { + return o +} + +func (o RuntimeTemplateMachineSpecOutput) ToRuntimeTemplateMachineSpecOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecOutput { + return o +} + +func (o RuntimeTemplateMachineSpecOutput) ToRuntimeTemplateMachineSpecPtrOutput() RuntimeTemplateMachineSpecPtrOutput { + return o.ToRuntimeTemplateMachineSpecPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateMachineSpecOutput) ToRuntimeTemplateMachineSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateMachineSpec) *RuntimeTemplateMachineSpec { + return &v + }).(RuntimeTemplateMachineSpecPtrOutput) +} + +// The number of accelerators used by the runtime. +func (o RuntimeTemplateMachineSpecOutput) AcceleratorCount() pulumi.IntPtrOutput { + return o.ApplyT(func(v RuntimeTemplateMachineSpec) *int { return v.AcceleratorCount }).(pulumi.IntPtrOutput) +} + +// The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. +func (o RuntimeTemplateMachineSpecOutput) AcceleratorType() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateMachineSpec) *string { return v.AcceleratorType }).(pulumi.StringPtrOutput) +} + +// The Compute Engine machine type selected for the runtime. +func (o RuntimeTemplateMachineSpecOutput) MachineType() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateMachineSpec) *string { return v.MachineType }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateMachineSpecPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateMachineSpecPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateMachineSpec)(nil)).Elem() +} + +func (o RuntimeTemplateMachineSpecPtrOutput) ToRuntimeTemplateMachineSpecPtrOutput() RuntimeTemplateMachineSpecPtrOutput { + return o +} + +func (o RuntimeTemplateMachineSpecPtrOutput) ToRuntimeTemplateMachineSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateMachineSpecPtrOutput { + return o +} + +func (o RuntimeTemplateMachineSpecPtrOutput) Elem() RuntimeTemplateMachineSpecOutput { + return o.ApplyT(func(v *RuntimeTemplateMachineSpec) RuntimeTemplateMachineSpec { + if v != nil { + return *v + } + var ret RuntimeTemplateMachineSpec + return ret + }).(RuntimeTemplateMachineSpecOutput) +} + +// The number of accelerators used by the runtime. +func (o RuntimeTemplateMachineSpecPtrOutput) AcceleratorCount() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateMachineSpec) *int { + if v == nil { + return nil + } + return v.AcceleratorCount + }).(pulumi.IntPtrOutput) +} + +// The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. +func (o RuntimeTemplateMachineSpecPtrOutput) AcceleratorType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateMachineSpec) *string { + if v == nil { + return nil + } + return v.AcceleratorType + }).(pulumi.StringPtrOutput) +} + +// The Compute Engine machine type selected for the runtime. +func (o RuntimeTemplateMachineSpecPtrOutput) MachineType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateMachineSpec) *string { + if v == nil { + return nil + } + return v.MachineType + }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateNetworkSpec struct { + // Enable public internet access for the runtime. + EnableInternetAccess *bool `pulumi:"enableInternetAccess"` + // The name of the VPC that this runtime is in. + Network *string `pulumi:"network"` + // The name of the subnetwork that this runtime is in. + Subnetwork *string `pulumi:"subnetwork"` +} + +// RuntimeTemplateNetworkSpecInput is an input type that accepts RuntimeTemplateNetworkSpecArgs and RuntimeTemplateNetworkSpecOutput values. +// You can construct a concrete instance of `RuntimeTemplateNetworkSpecInput` via: +// +// RuntimeTemplateNetworkSpecArgs{...} +type RuntimeTemplateNetworkSpecInput interface { + pulumi.Input + + ToRuntimeTemplateNetworkSpecOutput() RuntimeTemplateNetworkSpecOutput + ToRuntimeTemplateNetworkSpecOutputWithContext(context.Context) RuntimeTemplateNetworkSpecOutput +} + +type RuntimeTemplateNetworkSpecArgs struct { + // Enable public internet access for the runtime. + EnableInternetAccess pulumi.BoolPtrInput `pulumi:"enableInternetAccess"` + // The name of the VPC that this runtime is in. + Network pulumi.StringPtrInput `pulumi:"network"` + // The name of the subnetwork that this runtime is in. + Subnetwork pulumi.StringPtrInput `pulumi:"subnetwork"` +} + +func (RuntimeTemplateNetworkSpecArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateNetworkSpec)(nil)).Elem() +} + +func (i RuntimeTemplateNetworkSpecArgs) ToRuntimeTemplateNetworkSpecOutput() RuntimeTemplateNetworkSpecOutput { + return i.ToRuntimeTemplateNetworkSpecOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateNetworkSpecArgs) ToRuntimeTemplateNetworkSpecOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateNetworkSpecOutput) +} + +func (i RuntimeTemplateNetworkSpecArgs) ToRuntimeTemplateNetworkSpecPtrOutput() RuntimeTemplateNetworkSpecPtrOutput { + return i.ToRuntimeTemplateNetworkSpecPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateNetworkSpecArgs) ToRuntimeTemplateNetworkSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateNetworkSpecOutput).ToRuntimeTemplateNetworkSpecPtrOutputWithContext(ctx) +} + +// RuntimeTemplateNetworkSpecPtrInput is an input type that accepts RuntimeTemplateNetworkSpecArgs, RuntimeTemplateNetworkSpecPtr and RuntimeTemplateNetworkSpecPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateNetworkSpecPtrInput` via: +// +// RuntimeTemplateNetworkSpecArgs{...} +// +// or: +// +// nil +type RuntimeTemplateNetworkSpecPtrInput interface { + pulumi.Input + + ToRuntimeTemplateNetworkSpecPtrOutput() RuntimeTemplateNetworkSpecPtrOutput + ToRuntimeTemplateNetworkSpecPtrOutputWithContext(context.Context) RuntimeTemplateNetworkSpecPtrOutput +} + +type runtimeTemplateNetworkSpecPtrType RuntimeTemplateNetworkSpecArgs + +func RuntimeTemplateNetworkSpecPtr(v *RuntimeTemplateNetworkSpecArgs) RuntimeTemplateNetworkSpecPtrInput { + return (*runtimeTemplateNetworkSpecPtrType)(v) +} + +func (*runtimeTemplateNetworkSpecPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateNetworkSpec)(nil)).Elem() +} + +func (i *runtimeTemplateNetworkSpecPtrType) ToRuntimeTemplateNetworkSpecPtrOutput() RuntimeTemplateNetworkSpecPtrOutput { + return i.ToRuntimeTemplateNetworkSpecPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateNetworkSpecPtrType) ToRuntimeTemplateNetworkSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateNetworkSpecPtrOutput) +} + +type RuntimeTemplateNetworkSpecOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateNetworkSpecOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateNetworkSpec)(nil)).Elem() +} + +func (o RuntimeTemplateNetworkSpecOutput) ToRuntimeTemplateNetworkSpecOutput() RuntimeTemplateNetworkSpecOutput { + return o +} + +func (o RuntimeTemplateNetworkSpecOutput) ToRuntimeTemplateNetworkSpecOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecOutput { + return o +} + +func (o RuntimeTemplateNetworkSpecOutput) ToRuntimeTemplateNetworkSpecPtrOutput() RuntimeTemplateNetworkSpecPtrOutput { + return o.ToRuntimeTemplateNetworkSpecPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateNetworkSpecOutput) ToRuntimeTemplateNetworkSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateNetworkSpec) *RuntimeTemplateNetworkSpec { + return &v + }).(RuntimeTemplateNetworkSpecPtrOutput) +} + +// Enable public internet access for the runtime. +func (o RuntimeTemplateNetworkSpecOutput) EnableInternetAccess() pulumi.BoolPtrOutput { + return o.ApplyT(func(v RuntimeTemplateNetworkSpec) *bool { return v.EnableInternetAccess }).(pulumi.BoolPtrOutput) +} + +// The name of the VPC that this runtime is in. +func (o RuntimeTemplateNetworkSpecOutput) Network() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateNetworkSpec) *string { return v.Network }).(pulumi.StringPtrOutput) +} + +// The name of the subnetwork that this runtime is in. +func (o RuntimeTemplateNetworkSpecOutput) Subnetwork() pulumi.StringPtrOutput { + return o.ApplyT(func(v RuntimeTemplateNetworkSpec) *string { return v.Subnetwork }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateNetworkSpecPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateNetworkSpecPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateNetworkSpec)(nil)).Elem() +} + +func (o RuntimeTemplateNetworkSpecPtrOutput) ToRuntimeTemplateNetworkSpecPtrOutput() RuntimeTemplateNetworkSpecPtrOutput { + return o +} + +func (o RuntimeTemplateNetworkSpecPtrOutput) ToRuntimeTemplateNetworkSpecPtrOutputWithContext(ctx context.Context) RuntimeTemplateNetworkSpecPtrOutput { + return o +} + +func (o RuntimeTemplateNetworkSpecPtrOutput) Elem() RuntimeTemplateNetworkSpecOutput { + return o.ApplyT(func(v *RuntimeTemplateNetworkSpec) RuntimeTemplateNetworkSpec { + if v != nil { + return *v + } + var ret RuntimeTemplateNetworkSpec + return ret + }).(RuntimeTemplateNetworkSpecOutput) +} + +// Enable public internet access for the runtime. +func (o RuntimeTemplateNetworkSpecPtrOutput) EnableInternetAccess() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateNetworkSpec) *bool { + if v == nil { + return nil + } + return v.EnableInternetAccess + }).(pulumi.BoolPtrOutput) +} + +// The name of the VPC that this runtime is in. +func (o RuntimeTemplateNetworkSpecPtrOutput) Network() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateNetworkSpec) *string { + if v == nil { + return nil + } + return v.Network + }).(pulumi.StringPtrOutput) +} + +// The name of the subnetwork that this runtime is in. +func (o RuntimeTemplateNetworkSpecPtrOutput) Subnetwork() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateNetworkSpec) *string { + if v == nil { + return nil + } + return v.Subnetwork + }).(pulumi.StringPtrOutput) +} + +type RuntimeTemplateShieldedVmConfig struct { + // Enables secure boot for the runtime. + EnableSecureBoot *bool `pulumi:"enableSecureBoot"` +} + +// RuntimeTemplateShieldedVmConfigInput is an input type that accepts RuntimeTemplateShieldedVmConfigArgs and RuntimeTemplateShieldedVmConfigOutput values. +// You can construct a concrete instance of `RuntimeTemplateShieldedVmConfigInput` via: +// +// RuntimeTemplateShieldedVmConfigArgs{...} +type RuntimeTemplateShieldedVmConfigInput interface { + pulumi.Input + + ToRuntimeTemplateShieldedVmConfigOutput() RuntimeTemplateShieldedVmConfigOutput + ToRuntimeTemplateShieldedVmConfigOutputWithContext(context.Context) RuntimeTemplateShieldedVmConfigOutput +} + +type RuntimeTemplateShieldedVmConfigArgs struct { + // Enables secure boot for the runtime. + EnableSecureBoot pulumi.BoolPtrInput `pulumi:"enableSecureBoot"` +} + +func (RuntimeTemplateShieldedVmConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateShieldedVmConfig)(nil)).Elem() +} + +func (i RuntimeTemplateShieldedVmConfigArgs) ToRuntimeTemplateShieldedVmConfigOutput() RuntimeTemplateShieldedVmConfigOutput { + return i.ToRuntimeTemplateShieldedVmConfigOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateShieldedVmConfigArgs) ToRuntimeTemplateShieldedVmConfigOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateShieldedVmConfigOutput) +} + +func (i RuntimeTemplateShieldedVmConfigArgs) ToRuntimeTemplateShieldedVmConfigPtrOutput() RuntimeTemplateShieldedVmConfigPtrOutput { + return i.ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateShieldedVmConfigArgs) ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateShieldedVmConfigOutput).ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(ctx) +} + +// RuntimeTemplateShieldedVmConfigPtrInput is an input type that accepts RuntimeTemplateShieldedVmConfigArgs, RuntimeTemplateShieldedVmConfigPtr and RuntimeTemplateShieldedVmConfigPtrOutput values. +// You can construct a concrete instance of `RuntimeTemplateShieldedVmConfigPtrInput` via: +// +// RuntimeTemplateShieldedVmConfigArgs{...} +// +// or: +// +// nil +type RuntimeTemplateShieldedVmConfigPtrInput interface { + pulumi.Input + + ToRuntimeTemplateShieldedVmConfigPtrOutput() RuntimeTemplateShieldedVmConfigPtrOutput + ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(context.Context) RuntimeTemplateShieldedVmConfigPtrOutput +} + +type runtimeTemplateShieldedVmConfigPtrType RuntimeTemplateShieldedVmConfigArgs + +func RuntimeTemplateShieldedVmConfigPtr(v *RuntimeTemplateShieldedVmConfigArgs) RuntimeTemplateShieldedVmConfigPtrInput { + return (*runtimeTemplateShieldedVmConfigPtrType)(v) +} + +func (*runtimeTemplateShieldedVmConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateShieldedVmConfig)(nil)).Elem() +} + +func (i *runtimeTemplateShieldedVmConfigPtrType) ToRuntimeTemplateShieldedVmConfigPtrOutput() RuntimeTemplateShieldedVmConfigPtrOutput { + return i.ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(context.Background()) +} + +func (i *runtimeTemplateShieldedVmConfigPtrType) ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateShieldedVmConfigPtrOutput) +} + +type RuntimeTemplateShieldedVmConfigOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateShieldedVmConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RuntimeTemplateShieldedVmConfig)(nil)).Elem() +} + +func (o RuntimeTemplateShieldedVmConfigOutput) ToRuntimeTemplateShieldedVmConfigOutput() RuntimeTemplateShieldedVmConfigOutput { + return o +} + +func (o RuntimeTemplateShieldedVmConfigOutput) ToRuntimeTemplateShieldedVmConfigOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigOutput { + return o +} + +func (o RuntimeTemplateShieldedVmConfigOutput) ToRuntimeTemplateShieldedVmConfigPtrOutput() RuntimeTemplateShieldedVmConfigPtrOutput { + return o.ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(context.Background()) +} + +func (o RuntimeTemplateShieldedVmConfigOutput) ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RuntimeTemplateShieldedVmConfig) *RuntimeTemplateShieldedVmConfig { + return &v + }).(RuntimeTemplateShieldedVmConfigPtrOutput) +} + +// Enables secure boot for the runtime. +func (o RuntimeTemplateShieldedVmConfigOutput) EnableSecureBoot() pulumi.BoolPtrOutput { + return o.ApplyT(func(v RuntimeTemplateShieldedVmConfig) *bool { return v.EnableSecureBoot }).(pulumi.BoolPtrOutput) +} + +type RuntimeTemplateShieldedVmConfigPtrOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateShieldedVmConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplateShieldedVmConfig)(nil)).Elem() +} + +func (o RuntimeTemplateShieldedVmConfigPtrOutput) ToRuntimeTemplateShieldedVmConfigPtrOutput() RuntimeTemplateShieldedVmConfigPtrOutput { + return o +} + +func (o RuntimeTemplateShieldedVmConfigPtrOutput) ToRuntimeTemplateShieldedVmConfigPtrOutputWithContext(ctx context.Context) RuntimeTemplateShieldedVmConfigPtrOutput { + return o +} + +func (o RuntimeTemplateShieldedVmConfigPtrOutput) Elem() RuntimeTemplateShieldedVmConfigOutput { + return o.ApplyT(func(v *RuntimeTemplateShieldedVmConfig) RuntimeTemplateShieldedVmConfig { + if v != nil { + return *v + } + var ret RuntimeTemplateShieldedVmConfig + return ret + }).(RuntimeTemplateShieldedVmConfigOutput) +} + +// Enables secure boot for the runtime. +func (o RuntimeTemplateShieldedVmConfigPtrOutput) EnableSecureBoot() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RuntimeTemplateShieldedVmConfig) *bool { + if v == nil { + return nil + } + return v.EnableSecureBoot + }).(pulumi.BoolPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateDataPersistentDiskSpecInput)(nil)).Elem(), RuntimeTemplateDataPersistentDiskSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateDataPersistentDiskSpecPtrInput)(nil)).Elem(), RuntimeTemplateDataPersistentDiskSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateEncryptionSpecInput)(nil)).Elem(), RuntimeTemplateEncryptionSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateEncryptionSpecPtrInput)(nil)).Elem(), RuntimeTemplateEncryptionSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateEucConfigInput)(nil)).Elem(), RuntimeTemplateEucConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateEucConfigPtrInput)(nil)).Elem(), RuntimeTemplateEucConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateIdleShutdownConfigInput)(nil)).Elem(), RuntimeTemplateIdleShutdownConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateIdleShutdownConfigPtrInput)(nil)).Elem(), RuntimeTemplateIdleShutdownConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateMachineSpecInput)(nil)).Elem(), RuntimeTemplateMachineSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateMachineSpecPtrInput)(nil)).Elem(), RuntimeTemplateMachineSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateNetworkSpecInput)(nil)).Elem(), RuntimeTemplateNetworkSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateNetworkSpecPtrInput)(nil)).Elem(), RuntimeTemplateNetworkSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateShieldedVmConfigInput)(nil)).Elem(), RuntimeTemplateShieldedVmConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateShieldedVmConfigPtrInput)(nil)).Elem(), RuntimeTemplateShieldedVmConfigArgs{}) + pulumi.RegisterOutputType(RuntimeTemplateDataPersistentDiskSpecOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateDataPersistentDiskSpecPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateEncryptionSpecOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateEncryptionSpecPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateEucConfigOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateEucConfigPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateIdleShutdownConfigOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateIdleShutdownConfigPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateMachineSpecOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateMachineSpecPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateNetworkSpecOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateNetworkSpecPtrOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateShieldedVmConfigOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateShieldedVmConfigPtrOutput{}) +} diff --git a/sdk/go/gcp/colab/runtimeTemplate.go b/sdk/go/gcp/colab/runtimeTemplate.go new file mode 100644 index 0000000000..537a22d3dd --- /dev/null +++ b/sdk/go/gcp/colab/runtimeTemplate.go @@ -0,0 +1,699 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package colab + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, +// +// as well as common settings such as the network and whether public internet access is enabled. When you create +// a runtime, its VM is created according to the specifications of a runtime template.' +// +// To get more information about RuntimeTemplate, see: +// +// * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) +// * How-to Guides +// - [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) +// +// ## Example Usage +// +// ### Colab Runtime Template Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := colab.NewRuntimeTemplate(ctx, "runtime-template", &colab.RuntimeTemplateArgs{ +// Name: pulumi.String("colab-runtime-template"), +// DisplayName: pulumi.String("Runtime template basic"), +// Location: pulumi.String("us-central1"), +// MachineSpec: &colab.RuntimeTemplateMachineSpecArgs{ +// MachineType: pulumi.String("e2-standard-4"), +// }, +// NetworkSpec: &colab.RuntimeTemplateNetworkSpecArgs{ +// EnableInternetAccess: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Colab Runtime Template No Name +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := colab.NewRuntimeTemplate(ctx, "runtime-template", &colab.RuntimeTemplateArgs{ +// DisplayName: pulumi.String("Runtime template no name"), +// Location: pulumi.String("us-central1"), +// MachineSpec: &colab.RuntimeTemplateMachineSpecArgs{ +// MachineType: pulumi.String("e2-standard-4"), +// }, +// NetworkSpec: &colab.RuntimeTemplateNetworkSpecArgs{ +// EnableInternetAccess: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Colab Runtime Template Full +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/colab" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// myNetwork, err := compute.NewNetwork(ctx, "my_network", &compute.NetworkArgs{ +// Name: pulumi.String("colab-test-default"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// mySubnetwork, err := compute.NewSubnetwork(ctx, "my_subnetwork", &compute.SubnetworkArgs{ +// Name: pulumi.String("colab-test-default"), +// Network: myNetwork.ID(), +// Region: pulumi.String("us-central1"), +// IpCidrRange: pulumi.String("10.0.1.0/24"), +// }) +// if err != nil { +// return err +// } +// _, err = colab.NewRuntimeTemplate(ctx, "runtime-template", &colab.RuntimeTemplateArgs{ +// Name: pulumi.String("colab-runtime-template"), +// DisplayName: pulumi.String("Runtime template full"), +// Location: pulumi.String("us-central1"), +// Description: pulumi.String("Full runtime template"), +// MachineSpec: &colab.RuntimeTemplateMachineSpecArgs{ +// MachineType: pulumi.String("n1-standard-2"), +// AcceleratorType: pulumi.String("NVIDIA_TESLA_T4"), +// AcceleratorCount: pulumi.Int(1), +// }, +// DataPersistentDiskSpec: &colab.RuntimeTemplateDataPersistentDiskSpecArgs{ +// DiskType: pulumi.String("pd-standard"), +// DiskSizeGb: pulumi.String("200"), +// }, +// NetworkSpec: &colab.RuntimeTemplateNetworkSpecArgs{ +// EnableInternetAccess: pulumi.Bool(true), +// Network: myNetwork.ID(), +// Subnetwork: mySubnetwork.ID(), +// }, +// Labels: pulumi.StringMap{ +// "k": pulumi.String("val"), +// }, +// IdleShutdownConfig: &colab.RuntimeTemplateIdleShutdownConfigArgs{ +// IdleTimeout: pulumi.String("3600s"), +// }, +// EucConfig: &colab.RuntimeTemplateEucConfigArgs{ +// EucDisabled: pulumi.Bool(true), +// }, +// ShieldedVmConfig: &colab.RuntimeTemplateShieldedVmConfigArgs{ +// EnableSecureBoot: pulumi.Bool(true), +// }, +// NetworkTags: pulumi.StringArray{ +// pulumi.String("abc"), +// pulumi.String("def"), +// }, +// EncryptionSpec: &colab.RuntimeTemplateEncryptionSpecArgs{ +// KmsKeyName: pulumi.String("my-crypto-key"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// RuntimeTemplate can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` +// +// * `{{project}}/{{location}}/{{name}}` +// +// * `{{location}}/{{name}}` +// +// When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} +// ``` +type RuntimeTemplate struct { + pulumi.CustomResourceState + + // The configuration for the data disk of the runtime. + // Structure is documented below. + DataPersistentDiskSpec RuntimeTemplateDataPersistentDiskSpecOutput `pulumi:"dataPersistentDiskSpec"` + // The description of the Runtime Template. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Required. The display name of the Runtime Template. + DisplayName pulumi.StringOutput `pulumi:"displayName"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Customer-managed encryption key spec for the notebook runtime. + // Structure is documented below. + EncryptionSpec RuntimeTemplateEncryptionSpecPtrOutput `pulumi:"encryptionSpec"` + // EUC configuration of the NotebookRuntimeTemplate. + // Structure is documented below. + EucConfig RuntimeTemplateEucConfigPtrOutput `pulumi:"eucConfig"` + // Notebook Idle Shutdown configuration for the runtime. + // Structure is documented below. + IdleShutdownConfig RuntimeTemplateIdleShutdownConfigOutput `pulumi:"idleShutdownConfig"` + // Labels to identify and group the runtime template. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The location for the resource: https://cloud.google.com/colab/docs/locations + // + // *** + Location pulumi.StringOutput `pulumi:"location"` + // 'The machine configuration of the runtime.' + // Structure is documented below. + MachineSpec RuntimeTemplateMachineSpecOutput `pulumi:"machineSpec"` + // The resource name of the Runtime Template + Name pulumi.StringOutput `pulumi:"name"` + // The network configuration for the runtime. + // Structure is documented below. + NetworkSpec RuntimeTemplateNetworkSpecOutput `pulumi:"networkSpec"` + // Applies the given Compute Engine tags to the runtime. + NetworkTags pulumi.StringArrayOutput `pulumi:"networkTags"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Runtime Shielded VM spec. + // Structure is documented below. + ShieldedVmConfig RuntimeTemplateShieldedVmConfigPtrOutput `pulumi:"shieldedVmConfig"` +} + +// NewRuntimeTemplate registers a new resource with the given unique name, arguments, and options. +func NewRuntimeTemplate(ctx *pulumi.Context, + name string, args *RuntimeTemplateArgs, opts ...pulumi.ResourceOption) (*RuntimeTemplate, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DisplayName == nil { + return nil, errors.New("invalid value for required argument 'DisplayName'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource RuntimeTemplate + err := ctx.RegisterResource("gcp:colab/runtimeTemplate:RuntimeTemplate", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRuntimeTemplate gets an existing RuntimeTemplate resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRuntimeTemplate(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RuntimeTemplateState, opts ...pulumi.ResourceOption) (*RuntimeTemplate, error) { + var resource RuntimeTemplate + err := ctx.ReadResource("gcp:colab/runtimeTemplate:RuntimeTemplate", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RuntimeTemplate resources. +type runtimeTemplateState struct { + // The configuration for the data disk of the runtime. + // Structure is documented below. + DataPersistentDiskSpec *RuntimeTemplateDataPersistentDiskSpec `pulumi:"dataPersistentDiskSpec"` + // The description of the Runtime Template. + Description *string `pulumi:"description"` + // Required. The display name of the Runtime Template. + DisplayName *string `pulumi:"displayName"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Customer-managed encryption key spec for the notebook runtime. + // Structure is documented below. + EncryptionSpec *RuntimeTemplateEncryptionSpec `pulumi:"encryptionSpec"` + // EUC configuration of the NotebookRuntimeTemplate. + // Structure is documented below. + EucConfig *RuntimeTemplateEucConfig `pulumi:"eucConfig"` + // Notebook Idle Shutdown configuration for the runtime. + // Structure is documented below. + IdleShutdownConfig *RuntimeTemplateIdleShutdownConfig `pulumi:"idleShutdownConfig"` + // Labels to identify and group the runtime template. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location for the resource: https://cloud.google.com/colab/docs/locations + // + // *** + Location *string `pulumi:"location"` + // 'The machine configuration of the runtime.' + // Structure is documented below. + MachineSpec *RuntimeTemplateMachineSpec `pulumi:"machineSpec"` + // The resource name of the Runtime Template + Name *string `pulumi:"name"` + // The network configuration for the runtime. + // Structure is documented below. + NetworkSpec *RuntimeTemplateNetworkSpec `pulumi:"networkSpec"` + // Applies the given Compute Engine tags to the runtime. + NetworkTags []string `pulumi:"networkTags"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Runtime Shielded VM spec. + // Structure is documented below. + ShieldedVmConfig *RuntimeTemplateShieldedVmConfig `pulumi:"shieldedVmConfig"` +} + +type RuntimeTemplateState struct { + // The configuration for the data disk of the runtime. + // Structure is documented below. + DataPersistentDiskSpec RuntimeTemplateDataPersistentDiskSpecPtrInput + // The description of the Runtime Template. + Description pulumi.StringPtrInput + // Required. The display name of the Runtime Template. + DisplayName pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // Customer-managed encryption key spec for the notebook runtime. + // Structure is documented below. + EncryptionSpec RuntimeTemplateEncryptionSpecPtrInput + // EUC configuration of the NotebookRuntimeTemplate. + // Structure is documented below. + EucConfig RuntimeTemplateEucConfigPtrInput + // Notebook Idle Shutdown configuration for the runtime. + // Structure is documented below. + IdleShutdownConfig RuntimeTemplateIdleShutdownConfigPtrInput + // Labels to identify and group the runtime template. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location for the resource: https://cloud.google.com/colab/docs/locations + // + // *** + Location pulumi.StringPtrInput + // 'The machine configuration of the runtime.' + // Structure is documented below. + MachineSpec RuntimeTemplateMachineSpecPtrInput + // The resource name of the Runtime Template + Name pulumi.StringPtrInput + // The network configuration for the runtime. + // Structure is documented below. + NetworkSpec RuntimeTemplateNetworkSpecPtrInput + // Applies the given Compute Engine tags to the runtime. + NetworkTags pulumi.StringArrayInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Runtime Shielded VM spec. + // Structure is documented below. + ShieldedVmConfig RuntimeTemplateShieldedVmConfigPtrInput +} + +func (RuntimeTemplateState) ElementType() reflect.Type { + return reflect.TypeOf((*runtimeTemplateState)(nil)).Elem() +} + +type runtimeTemplateArgs struct { + // The configuration for the data disk of the runtime. + // Structure is documented below. + DataPersistentDiskSpec *RuntimeTemplateDataPersistentDiskSpec `pulumi:"dataPersistentDiskSpec"` + // The description of the Runtime Template. + Description *string `pulumi:"description"` + // Required. The display name of the Runtime Template. + DisplayName string `pulumi:"displayName"` + // Customer-managed encryption key spec for the notebook runtime. + // Structure is documented below. + EncryptionSpec *RuntimeTemplateEncryptionSpec `pulumi:"encryptionSpec"` + // EUC configuration of the NotebookRuntimeTemplate. + // Structure is documented below. + EucConfig *RuntimeTemplateEucConfig `pulumi:"eucConfig"` + // Notebook Idle Shutdown configuration for the runtime. + // Structure is documented below. + IdleShutdownConfig *RuntimeTemplateIdleShutdownConfig `pulumi:"idleShutdownConfig"` + // Labels to identify and group the runtime template. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location for the resource: https://cloud.google.com/colab/docs/locations + // + // *** + Location string `pulumi:"location"` + // 'The machine configuration of the runtime.' + // Structure is documented below. + MachineSpec *RuntimeTemplateMachineSpec `pulumi:"machineSpec"` + // The resource name of the Runtime Template + Name *string `pulumi:"name"` + // The network configuration for the runtime. + // Structure is documented below. + NetworkSpec *RuntimeTemplateNetworkSpec `pulumi:"networkSpec"` + // Applies the given Compute Engine tags to the runtime. + NetworkTags []string `pulumi:"networkTags"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Runtime Shielded VM spec. + // Structure is documented below. + ShieldedVmConfig *RuntimeTemplateShieldedVmConfig `pulumi:"shieldedVmConfig"` +} + +// The set of arguments for constructing a RuntimeTemplate resource. +type RuntimeTemplateArgs struct { + // The configuration for the data disk of the runtime. + // Structure is documented below. + DataPersistentDiskSpec RuntimeTemplateDataPersistentDiskSpecPtrInput + // The description of the Runtime Template. + Description pulumi.StringPtrInput + // Required. The display name of the Runtime Template. + DisplayName pulumi.StringInput + // Customer-managed encryption key spec for the notebook runtime. + // Structure is documented below. + EncryptionSpec RuntimeTemplateEncryptionSpecPtrInput + // EUC configuration of the NotebookRuntimeTemplate. + // Structure is documented below. + EucConfig RuntimeTemplateEucConfigPtrInput + // Notebook Idle Shutdown configuration for the runtime. + // Structure is documented below. + IdleShutdownConfig RuntimeTemplateIdleShutdownConfigPtrInput + // Labels to identify and group the runtime template. + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location for the resource: https://cloud.google.com/colab/docs/locations + // + // *** + Location pulumi.StringInput + // 'The machine configuration of the runtime.' + // Structure is documented below. + MachineSpec RuntimeTemplateMachineSpecPtrInput + // The resource name of the Runtime Template + Name pulumi.StringPtrInput + // The network configuration for the runtime. + // Structure is documented below. + NetworkSpec RuntimeTemplateNetworkSpecPtrInput + // Applies the given Compute Engine tags to the runtime. + NetworkTags pulumi.StringArrayInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Runtime Shielded VM spec. + // Structure is documented below. + ShieldedVmConfig RuntimeTemplateShieldedVmConfigPtrInput +} + +func (RuntimeTemplateArgs) ElementType() reflect.Type { + return reflect.TypeOf((*runtimeTemplateArgs)(nil)).Elem() +} + +type RuntimeTemplateInput interface { + pulumi.Input + + ToRuntimeTemplateOutput() RuntimeTemplateOutput + ToRuntimeTemplateOutputWithContext(ctx context.Context) RuntimeTemplateOutput +} + +func (*RuntimeTemplate) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplate)(nil)).Elem() +} + +func (i *RuntimeTemplate) ToRuntimeTemplateOutput() RuntimeTemplateOutput { + return i.ToRuntimeTemplateOutputWithContext(context.Background()) +} + +func (i *RuntimeTemplate) ToRuntimeTemplateOutputWithContext(ctx context.Context) RuntimeTemplateOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateOutput) +} + +// RuntimeTemplateArrayInput is an input type that accepts RuntimeTemplateArray and RuntimeTemplateArrayOutput values. +// You can construct a concrete instance of `RuntimeTemplateArrayInput` via: +// +// RuntimeTemplateArray{ RuntimeTemplateArgs{...} } +type RuntimeTemplateArrayInput interface { + pulumi.Input + + ToRuntimeTemplateArrayOutput() RuntimeTemplateArrayOutput + ToRuntimeTemplateArrayOutputWithContext(context.Context) RuntimeTemplateArrayOutput +} + +type RuntimeTemplateArray []RuntimeTemplateInput + +func (RuntimeTemplateArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RuntimeTemplate)(nil)).Elem() +} + +func (i RuntimeTemplateArray) ToRuntimeTemplateArrayOutput() RuntimeTemplateArrayOutput { + return i.ToRuntimeTemplateArrayOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateArray) ToRuntimeTemplateArrayOutputWithContext(ctx context.Context) RuntimeTemplateArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateArrayOutput) +} + +// RuntimeTemplateMapInput is an input type that accepts RuntimeTemplateMap and RuntimeTemplateMapOutput values. +// You can construct a concrete instance of `RuntimeTemplateMapInput` via: +// +// RuntimeTemplateMap{ "key": RuntimeTemplateArgs{...} } +type RuntimeTemplateMapInput interface { + pulumi.Input + + ToRuntimeTemplateMapOutput() RuntimeTemplateMapOutput + ToRuntimeTemplateMapOutputWithContext(context.Context) RuntimeTemplateMapOutput +} + +type RuntimeTemplateMap map[string]RuntimeTemplateInput + +func (RuntimeTemplateMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RuntimeTemplate)(nil)).Elem() +} + +func (i RuntimeTemplateMap) ToRuntimeTemplateMapOutput() RuntimeTemplateMapOutput { + return i.ToRuntimeTemplateMapOutputWithContext(context.Background()) +} + +func (i RuntimeTemplateMap) ToRuntimeTemplateMapOutputWithContext(ctx context.Context) RuntimeTemplateMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RuntimeTemplateMapOutput) +} + +type RuntimeTemplateOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RuntimeTemplate)(nil)).Elem() +} + +func (o RuntimeTemplateOutput) ToRuntimeTemplateOutput() RuntimeTemplateOutput { + return o +} + +func (o RuntimeTemplateOutput) ToRuntimeTemplateOutputWithContext(ctx context.Context) RuntimeTemplateOutput { + return o +} + +// The configuration for the data disk of the runtime. +// Structure is documented below. +func (o RuntimeTemplateOutput) DataPersistentDiskSpec() RuntimeTemplateDataPersistentDiskSpecOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateDataPersistentDiskSpecOutput { return v.DataPersistentDiskSpec }).(RuntimeTemplateDataPersistentDiskSpecOutput) +} + +// The description of the Runtime Template. +func (o RuntimeTemplateOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Required. The display name of the Runtime Template. +func (o RuntimeTemplateOutput) DisplayName() pulumi.StringOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringOutput { return v.DisplayName }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o RuntimeTemplateOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// Customer-managed encryption key spec for the notebook runtime. +// Structure is documented below. +func (o RuntimeTemplateOutput) EncryptionSpec() RuntimeTemplateEncryptionSpecPtrOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateEncryptionSpecPtrOutput { return v.EncryptionSpec }).(RuntimeTemplateEncryptionSpecPtrOutput) +} + +// EUC configuration of the NotebookRuntimeTemplate. +// Structure is documented below. +func (o RuntimeTemplateOutput) EucConfig() RuntimeTemplateEucConfigPtrOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateEucConfigPtrOutput { return v.EucConfig }).(RuntimeTemplateEucConfigPtrOutput) +} + +// Notebook Idle Shutdown configuration for the runtime. +// Structure is documented below. +func (o RuntimeTemplateOutput) IdleShutdownConfig() RuntimeTemplateIdleShutdownConfigOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateIdleShutdownConfigOutput { return v.IdleShutdownConfig }).(RuntimeTemplateIdleShutdownConfigOutput) +} + +// Labels to identify and group the runtime template. +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. +// Please refer to the field `effectiveLabels` for all of the labels present on the resource. +func (o RuntimeTemplateOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location for the resource: https://cloud.google.com/colab/docs/locations +// +// *** +func (o RuntimeTemplateOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// 'The machine configuration of the runtime.' +// Structure is documented below. +func (o RuntimeTemplateOutput) MachineSpec() RuntimeTemplateMachineSpecOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateMachineSpecOutput { return v.MachineSpec }).(RuntimeTemplateMachineSpecOutput) +} + +// The resource name of the Runtime Template +func (o RuntimeTemplateOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The network configuration for the runtime. +// Structure is documented below. +func (o RuntimeTemplateOutput) NetworkSpec() RuntimeTemplateNetworkSpecOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateNetworkSpecOutput { return v.NetworkSpec }).(RuntimeTemplateNetworkSpecOutput) +} + +// Applies the given Compute Engine tags to the runtime. +func (o RuntimeTemplateOutput) NetworkTags() pulumi.StringArrayOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringArrayOutput { return v.NetworkTags }).(pulumi.StringArrayOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o RuntimeTemplateOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o RuntimeTemplateOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RuntimeTemplate) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Runtime Shielded VM spec. +// Structure is documented below. +func (o RuntimeTemplateOutput) ShieldedVmConfig() RuntimeTemplateShieldedVmConfigPtrOutput { + return o.ApplyT(func(v *RuntimeTemplate) RuntimeTemplateShieldedVmConfigPtrOutput { return v.ShieldedVmConfig }).(RuntimeTemplateShieldedVmConfigPtrOutput) +} + +type RuntimeTemplateArrayOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RuntimeTemplate)(nil)).Elem() +} + +func (o RuntimeTemplateArrayOutput) ToRuntimeTemplateArrayOutput() RuntimeTemplateArrayOutput { + return o +} + +func (o RuntimeTemplateArrayOutput) ToRuntimeTemplateArrayOutputWithContext(ctx context.Context) RuntimeTemplateArrayOutput { + return o +} + +func (o RuntimeTemplateArrayOutput) Index(i pulumi.IntInput) RuntimeTemplateOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RuntimeTemplate { + return vs[0].([]*RuntimeTemplate)[vs[1].(int)] + }).(RuntimeTemplateOutput) +} + +type RuntimeTemplateMapOutput struct{ *pulumi.OutputState } + +func (RuntimeTemplateMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RuntimeTemplate)(nil)).Elem() +} + +func (o RuntimeTemplateMapOutput) ToRuntimeTemplateMapOutput() RuntimeTemplateMapOutput { + return o +} + +func (o RuntimeTemplateMapOutput) ToRuntimeTemplateMapOutputWithContext(ctx context.Context) RuntimeTemplateMapOutput { + return o +} + +func (o RuntimeTemplateMapOutput) MapIndex(k pulumi.StringInput) RuntimeTemplateOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RuntimeTemplate { + return vs[0].(map[string]*RuntimeTemplate)[vs[1].(string)] + }).(RuntimeTemplateOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateInput)(nil)).Elem(), &RuntimeTemplate{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateArrayInput)(nil)).Elem(), RuntimeTemplateArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RuntimeTemplateMapInput)(nil)).Elem(), RuntimeTemplateMap{}) + pulumi.RegisterOutputType(RuntimeTemplateOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateArrayOutput{}) + pulumi.RegisterOutputType(RuntimeTemplateMapOutput{}) +} diff --git a/sdk/go/gcp/compute/interconnectAttachment.go b/sdk/go/gcp/compute/interconnectAttachment.go index f3896d6843..0a252a43e2 100644 --- a/sdk/go/gcp/compute/interconnectAttachment.go +++ b/sdk/go/gcp/compute/interconnectAttachment.go @@ -165,7 +165,7 @@ type InterconnectAttachment struct { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G - // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. Bandwidth pulumi.StringOutput `pulumi:"bandwidth"` // Up to 16 candidate prefixes that can be used to restrict the allocation // of cloudRouterIpAddress and customerRouterIpAddress for this attachment. @@ -336,7 +336,7 @@ type interconnectAttachmentState struct { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G - // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. Bandwidth *string `pulumi:"bandwidth"` // Up to 16 candidate prefixes that can be used to restrict the allocation // of cloudRouterIpAddress and customerRouterIpAddress for this attachment. @@ -475,7 +475,7 @@ type InterconnectAttachmentState struct { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G - // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. Bandwidth pulumi.StringPtrInput // Up to 16 candidate prefixes that can be used to restrict the allocation // of cloudRouterIpAddress and customerRouterIpAddress for this attachment. @@ -618,7 +618,7 @@ type interconnectAttachmentArgs struct { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G - // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. Bandwidth *string `pulumi:"bandwidth"` // Up to 16 candidate prefixes that can be used to restrict the allocation // of cloudRouterIpAddress and customerRouterIpAddress for this attachment. @@ -725,7 +725,7 @@ type InterconnectAttachmentArgs struct { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G - // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + // Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. Bandwidth pulumi.StringPtrInput // Up to 16 candidate prefixes that can be used to restrict the allocation // of cloudRouterIpAddress and customerRouterIpAddress for this attachment. @@ -920,7 +920,7 @@ func (o InterconnectAttachmentOutput) AdminEnabled() pulumi.BoolPtrOutput { // For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. // Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, // Defaults to BPS_10G -// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. +// Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. func (o InterconnectAttachmentOutput) Bandwidth() pulumi.StringOutput { return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Bandwidth }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/pulumiTypes.go b/sdk/go/gcp/compute/pulumiTypes.go index 1cea752c53..6d1584b850 100644 --- a/sdk/go/gcp/compute/pulumiTypes.go +++ b/sdk/go/gcp/compute/pulumiTypes.go @@ -27191,7 +27191,7 @@ type InstanceNetworkInterface struct { QueueCount *int `pulumi:"queueCount"` // A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. SecurityPolicy *string `pulumi:"securityPolicy"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType *string `pulumi:"stackType"` // The name or selfLink of the subnetwork to attach this // interface to. Either `network` or `subnetwork` must be provided. If network isn't provided @@ -27255,7 +27255,7 @@ type InstanceNetworkInterfaceArgs struct { QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` // A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. SecurityPolicy pulumi.StringPtrInput `pulumi:"securityPolicy"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType pulumi.StringPtrInput `pulumi:"stackType"` // The name or selfLink of the subnetwork to attach this // interface to. Either `network` or `subnetwork` must be provided. If network isn't provided @@ -27399,7 +27399,7 @@ func (o InstanceNetworkInterfaceOutput) SecurityPolicy() pulumi.StringPtrOutput return o.ApplyT(func(v InstanceNetworkInterface) *string { return v.SecurityPolicy }).(pulumi.StringPtrOutput) } -// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. +// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. func (o InstanceNetworkInterfaceOutput) StackType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceNetworkInterface) *string { return v.StackType }).(pulumi.StringPtrOutput) } @@ -31491,7 +31491,7 @@ type InstanceTemplateNetworkInterface struct { NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType *string `pulumi:"stackType"` // the name of the subnetwork to attach this interface // to. The subnetwork must exist in the same `region` this instance will be @@ -31551,7 +31551,7 @@ type InstanceTemplateNetworkInterfaceArgs struct { NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType pulumi.StringPtrInput `pulumi:"stackType"` // the name of the subnetwork to attach this interface // to. The subnetwork must exist in the same `region` this instance will be @@ -31692,7 +31692,7 @@ func (o InstanceTemplateNetworkInterfaceOutput) QueueCount() pulumi.IntPtrOutput return o.ApplyT(func(v InstanceTemplateNetworkInterface) *int { return v.QueueCount }).(pulumi.IntPtrOutput) } -// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. +// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. func (o InstanceTemplateNetworkInterfaceOutput) StackType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceTemplateNetworkInterface) *string { return v.StackType }).(pulumi.StringPtrOutput) } @@ -55654,7 +55654,7 @@ type RegionInstanceTemplateNetworkInterface struct { NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType *string `pulumi:"stackType"` // the name of the subnetwork to attach this interface // to. The subnetwork must exist in the same `region` this instance will be @@ -55705,7 +55705,7 @@ type RegionInstanceTemplateNetworkInterfaceArgs struct { NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` - // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + // The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. StackType pulumi.StringPtrInput `pulumi:"stackType"` // the name of the subnetwork to attach this interface // to. The subnetwork must exist in the same `region` this instance will be @@ -55834,7 +55834,7 @@ func (o RegionInstanceTemplateNetworkInterfaceOutput) QueueCount() pulumi.IntPtr return o.ApplyT(func(v RegionInstanceTemplateNetworkInterface) *int { return v.QueueCount }).(pulumi.IntPtrOutput) } -// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. +// The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. func (o RegionInstanceTemplateNetworkInterfaceOutput) StackType() pulumi.StringPtrOutput { return o.ApplyT(func(v RegionInstanceTemplateNetworkInterface) *string { return v.StackType }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/route.go b/sdk/go/gcp/compute/route.go index 6ac0d2ec0f..460dab603b 100644 --- a/sdk/go/gcp/compute/route.go +++ b/sdk/go/gcp/compute/route.go @@ -348,8 +348,7 @@ type Route struct { // `nextHopInstance`. Omit if `nextHopInstance` is specified as // a URL. NextHopInstanceZone pulumi.StringOutput `pulumi:"nextHopInstanceZone"` - // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - // distance, and available bandwidth between regions. + // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. NextHopInterRegionCost pulumi.StringOutput `pulumi:"nextHopInterRegionCost"` // Network IP address of an instance that should handle matching packets. NextHopIp pulumi.StringOutput `pulumi:"nextHopIp"` @@ -357,8 +356,7 @@ type Route struct { NextHopMed pulumi.StringOutput `pulumi:"nextHopMed"` // URL to a Network that should handle matching packets. NextHopNetwork pulumi.StringOutput `pulumi:"nextHopNetwork"` - // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - // INCOMPLETE. + // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. NextHopOrigin pulumi.StringOutput `pulumi:"nextHopOrigin"` // URL to a VpnTunnel that should handle matching packets. NextHopVpnTunnel pulumi.StringPtrOutput `pulumi:"nextHopVpnTunnel"` @@ -465,8 +463,7 @@ type routeState struct { // `nextHopInstance`. Omit if `nextHopInstance` is specified as // a URL. NextHopInstanceZone *string `pulumi:"nextHopInstanceZone"` - // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - // distance, and available bandwidth between regions. + // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. NextHopInterRegionCost *string `pulumi:"nextHopInterRegionCost"` // Network IP address of an instance that should handle matching packets. NextHopIp *string `pulumi:"nextHopIp"` @@ -474,8 +471,7 @@ type routeState struct { NextHopMed *string `pulumi:"nextHopMed"` // URL to a Network that should handle matching packets. NextHopNetwork *string `pulumi:"nextHopNetwork"` - // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - // INCOMPLETE. + // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. NextHopOrigin *string `pulumi:"nextHopOrigin"` // URL to a VpnTunnel that should handle matching packets. NextHopVpnTunnel *string `pulumi:"nextHopVpnTunnel"` @@ -547,8 +543,7 @@ type RouteState struct { // `nextHopInstance`. Omit if `nextHopInstance` is specified as // a URL. NextHopInstanceZone pulumi.StringPtrInput - // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - // distance, and available bandwidth between regions. + // Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. NextHopInterRegionCost pulumi.StringPtrInput // Network IP address of an instance that should handle matching packets. NextHopIp pulumi.StringPtrInput @@ -556,8 +551,7 @@ type RouteState struct { NextHopMed pulumi.StringPtrInput // URL to a Network that should handle matching packets. NextHopNetwork pulumi.StringPtrInput - // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - // INCOMPLETE. + // Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. NextHopOrigin pulumi.StringPtrInput // URL to a VpnTunnel that should handle matching packets. NextHopVpnTunnel pulumi.StringPtrInput @@ -884,8 +878,7 @@ func (o RouteOutput) NextHopInstanceZone() pulumi.StringOutput { return o.ApplyT(func(v *Route) pulumi.StringOutput { return v.NextHopInstanceZone }).(pulumi.StringOutput) } -// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, -// distance, and available bandwidth between regions. +// Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. func (o RouteOutput) NextHopInterRegionCost() pulumi.StringOutput { return o.ApplyT(func(v *Route) pulumi.StringOutput { return v.NextHopInterRegionCost }).(pulumi.StringOutput) } @@ -905,8 +898,7 @@ func (o RouteOutput) NextHopNetwork() pulumi.StringOutput { return o.ApplyT(func(v *Route) pulumi.StringOutput { return v.NextHopNetwork }).(pulumi.StringOutput) } -// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or -// INCOMPLETE. +// Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. func (o RouteOutput) NextHopOrigin() pulumi.StringOutput { return o.ApplyT(func(v *Route) pulumi.StringOutput { return v.NextHopOrigin }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/subnetwork.go b/sdk/go/gcp/compute/subnetwork.go index f085f7a0ad..cd2feb412d 100644 --- a/sdk/go/gcp/compute/subnetwork.go +++ b/sdk/go/gcp/compute/subnetwork.go @@ -568,7 +568,7 @@ type Subnetwork struct { SendSecondaryIpRangeIfEmpty pulumi.BoolPtrOutput `pulumi:"sendSecondaryIpRangeIfEmpty"` // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. - // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. StackType pulumi.StringOutput `pulumi:"stackType"` // The unique identifier number for the resource. This identifier is defined by the server. SubnetworkId pulumi.IntOutput `pulumi:"subnetworkId"` @@ -706,7 +706,7 @@ type subnetworkState struct { SendSecondaryIpRangeIfEmpty *bool `pulumi:"sendSecondaryIpRangeIfEmpty"` // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. - // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. StackType *string `pulumi:"stackType"` // The unique identifier number for the resource. This identifier is defined by the server. SubnetworkId *int `pulumi:"subnetworkId"` @@ -812,7 +812,7 @@ type SubnetworkState struct { SendSecondaryIpRangeIfEmpty pulumi.BoolPtrInput // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. - // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. StackType pulumi.StringPtrInput // The unique identifier number for the resource. This identifier is defined by the server. SubnetworkId pulumi.IntPtrInput @@ -907,7 +907,7 @@ type subnetworkArgs struct { SendSecondaryIpRangeIfEmpty *bool `pulumi:"sendSecondaryIpRangeIfEmpty"` // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. - // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. StackType *string `pulumi:"stackType"` } @@ -997,7 +997,7 @@ type SubnetworkArgs struct { SendSecondaryIpRangeIfEmpty pulumi.BoolPtrInput // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. - // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. StackType pulumi.StringPtrInput } @@ -1256,7 +1256,7 @@ func (o SubnetworkOutput) SendSecondaryIpRangeIfEmpty() pulumi.BoolPtrOutput { // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. -// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. +// Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. func (o SubnetworkOutput) StackType() pulumi.StringOutput { return o.ApplyT(func(v *Subnetwork) pulumi.StringOutput { return v.StackType }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/targetInstance.go b/sdk/go/gcp/compute/targetInstance.go index 84bbbd5d92..1a7dfccbdf 100644 --- a/sdk/go/gcp/compute/targetInstance.go +++ b/sdk/go/gcp/compute/targetInstance.go @@ -201,7 +201,7 @@ import ( // } // policyddosprotection, err := compute.NewRegionSecurityPolicy(ctx, "policyddosprotection", &compute.RegionSecurityPolicyArgs{ // Region: pulumi.String("southamerica-west1"), -// Name: pulumi.String("tf-test-policyddos_85794"), +// Name: pulumi.String("tf-test-policyddos_21197"), // Description: pulumi.String("ddos protection security policy to set target instance"), // Type: pulumi.String("CLOUD_ARMOR_NETWORK"), // DdosProtectionConfig: &compute.RegionSecurityPolicyDdosProtectionConfigArgs{ @@ -213,7 +213,7 @@ import ( // } // edgeSecService, err := compute.NewNetworkEdgeSecurityService(ctx, "edge_sec_service", &compute.NetworkEdgeSecurityServiceArgs{ // Region: pulumi.String("southamerica-west1"), -// Name: pulumi.String("tf-test-edgesec_21197"), +// Name: pulumi.String("tf-test-edgesec_52865"), // SecurityPolicy: policyddosprotection.SelfLink, // }) // if err != nil { diff --git a/sdk/go/gcp/compute/urlmap.go b/sdk/go/gcp/compute/urlmap.go index 3e0ccf9fbc..3c515a7771 100644 --- a/sdk/go/gcp/compute/urlmap.go +++ b/sdk/go/gcp/compute/urlmap.go @@ -17,6 +17,8 @@ import ( // To get more information about UrlMap, see: // // * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) +// * How-to Guides +// - [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) // // ## Example Usage // diff --git a/sdk/go/gcp/config/config.go b/sdk/go/gcp/config/config.go index 30d74c278e..ef64f855cd 100644 --- a/sdk/go/gcp/config/config.go +++ b/sdk/go/gcp/config/config.go @@ -152,6 +152,9 @@ func GetClouddomainsCustomEndpoint(ctx *pulumi.Context) string { func GetCloudfunctions2CustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:cloudfunctions2CustomEndpoint") } +func GetColabCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:colabCustomEndpoint") +} func GetComposerCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:composerCustomEndpoint") } @@ -415,6 +418,12 @@ func GetOsLoginCustomEndpoint(ctx *pulumi.Context) string { func GetParallelstoreCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:parallelstoreCustomEndpoint") } +func GetParameterManagerCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:parameterManagerCustomEndpoint") +} +func GetParameterManagerRegionalCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:parameterManagerRegionalCustomEndpoint") +} func GetPrivatecaCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:privatecaCustomEndpoint") } diff --git a/sdk/go/gcp/databasemigrationservice/connectionProfile.go b/sdk/go/gcp/databasemigrationservice/connectionProfile.go index 3d7062e72d..fdbd8053ec 100644 --- a/sdk/go/gcp/databasemigrationservice/connectionProfile.go +++ b/sdk/go/gcp/databasemigrationservice/connectionProfile.go @@ -312,11 +312,11 @@ import ( // "foo": pulumi.String("bar"), // }, // Alloydb: &databasemigrationservice.ConnectionProfileAlloydbArgs{ -// ClusterId: pulumi.String("tf-test-dbmsalloycluster_52865"), +// ClusterId: pulumi.String("tf-test-dbmsalloycluster_85840"), // Settings: &databasemigrationservice.ConnectionProfileAlloydbSettingsArgs{ // InitialUser: &databasemigrationservice.ConnectionProfileAlloydbSettingsInitialUserArgs{ -// User: pulumi.String("alloyuser_85840"), -// Password: pulumi.String("alloypass_60302"), +// User: pulumi.String("alloyuser_60302"), +// Password: pulumi.String("alloypass_22811"), // }, // VpcNetwork: _default.ID(), // Labels: pulumi.StringMap{ diff --git a/sdk/go/gcp/dataplex/entryType.go b/sdk/go/gcp/dataplex/entryType.go index 2b8e40be4c..1a3105f965 100644 --- a/sdk/go/gcp/dataplex/entryType.go +++ b/sdk/go/gcp/dataplex/entryType.go @@ -57,7 +57,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // testEntryTypeFull, err := dataplex.NewAspectType(ctx, "test_entry_type_full", &dataplex.AspectTypeArgs{ -// AspectTypeId: pulumi.String("tf-test-aspect-type_22811"), +// AspectTypeId: pulumi.String("tf-test-aspect-type_91042"), // Location: pulumi.String("us-central1"), // Project: pulumi.String("my-project-name"), // MetadataTemplate: pulumi.String(`{ diff --git a/sdk/go/gcp/dataplex/task.go b/sdk/go/gcp/dataplex/task.go index 21947bf55d..e57443df06 100644 --- a/sdk/go/gcp/dataplex/task.go +++ b/sdk/go/gcp/dataplex/task.go @@ -44,7 +44,7 @@ import ( // return err // } // example, err := dataplex.NewLake(ctx, "example", &dataplex.LakeArgs{ -// Name: pulumi.String("tf-test-lake_91042"), +// Name: pulumi.String("tf-test-lake_72490"), // Location: pulumi.String("us-central1"), // Project: pulumi.String("my-project-name"), // }) @@ -52,7 +52,7 @@ import ( // return err // } // _, err = dataplex.NewTask(ctx, "example", &dataplex.TaskArgs{ -// TaskId: pulumi.String("tf-test-task_72490"), +// TaskId: pulumi.String("tf-test-task_89605"), // Location: pulumi.String("us-central1"), // Lake: example.Name, // Description: pulumi.String("Test Task Basic"), @@ -106,7 +106,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // // VPC network // _, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{ -// Name: pulumi.String("tf-test-workstation-cluster_89605"), +// Name: pulumi.String("tf-test-workstation-cluster_56730"), // AutoCreateSubnetworks: pulumi.Bool(true), // }) // if err != nil { @@ -117,7 +117,7 @@ import ( // return err // } // exampleSpark, err := dataplex.NewLake(ctx, "example_spark", &dataplex.LakeArgs{ -// Name: pulumi.String("tf-test-lake_56730"), +// Name: pulumi.String("tf-test-lake_95154"), // Location: pulumi.String("us-central1"), // Project: pulumi.String("my-project-name"), // }) @@ -125,7 +125,7 @@ import ( // return err // } // _, err = dataplex.NewTask(ctx, "example_spark", &dataplex.TaskArgs{ -// TaskId: pulumi.String("tf-test-task_95154"), +// TaskId: pulumi.String("tf-test-task_64336"), // Location: pulumi.String("us-central1"), // Lake: exampleSpark.Name, // TriggerSpec: &dataplex.TaskTriggerSpecArgs{ @@ -203,7 +203,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // // VPC network // _, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{ -// Name: pulumi.String("tf-test-workstation-cluster_64336"), +// Name: pulumi.String("tf-test-workstation-cluster_34962"), // AutoCreateSubnetworks: pulumi.Bool(true), // }) // if err != nil { @@ -214,7 +214,7 @@ import ( // return err // } // exampleNotebook, err := dataplex.NewLake(ctx, "example_notebook", &dataplex.LakeArgs{ -// Name: pulumi.String("tf-test-lake_34962"), +// Name: pulumi.String("tf-test-lake_74000"), // Location: pulumi.String("us-central1"), // Project: pulumi.String("my-project-name"), // }) @@ -222,7 +222,7 @@ import ( // return err // } // _, err = dataplex.NewTask(ctx, "example_notebook", &dataplex.TaskArgs{ -// TaskId: pulumi.String("tf-test-task_74000"), +// TaskId: pulumi.String("tf-test-task_75125"), // Location: pulumi.String("us-central1"), // Lake: exampleNotebook.Name, // TriggerSpec: &dataplex.TaskTriggerSpecArgs{ diff --git a/sdk/go/gcp/dataproc/batch.go b/sdk/go/gcp/dataproc/batch.go index 40c2af403f..55977f4086 100644 --- a/sdk/go/gcp/dataproc/batch.go +++ b/sdk/go/gcp/dataproc/batch.go @@ -37,7 +37,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := dataproc.NewBatch(ctx, "example_batch_spark", &dataproc.BatchArgs{ -// BatchId: pulumi.String("tf-test-batch_75125"), +// BatchId: pulumi.String("tf-test-batch_88722"), // Location: pulumi.String("us-central1"), // Labels: pulumi.StringMap{ // "batch_test": pulumi.String("terraform"), @@ -231,7 +231,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := dataproc.NewBatch(ctx, "example_batch_sparsql", &dataproc.BatchArgs{ -// BatchId: pulumi.String("tf-test-batch_88722"), +// BatchId: pulumi.String("tf-test-batch_39249"), // Location: pulumi.String("us-central1"), // RuntimeConfig: &dataproc.BatchRuntimeConfigArgs{ // Properties: pulumi.StringMap{ @@ -277,7 +277,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := dataproc.NewBatch(ctx, "example_batch_pyspark", &dataproc.BatchArgs{ -// BatchId: pulumi.String("tf-test-batch_39249"), +// BatchId: pulumi.String("tf-test-batch_74391"), // Location: pulumi.String("us-central1"), // RuntimeConfig: &dataproc.BatchRuntimeConfigArgs{ // Properties: pulumi.StringMap{ @@ -334,7 +334,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := dataproc.NewBatch(ctx, "example_batch_sparkr", &dataproc.BatchArgs{ -// BatchId: pulumi.String("tf-test-batch_74391"), +// BatchId: pulumi.String("tf-test-batch_16511"), // Location: pulumi.String("us-central1"), // Labels: pulumi.StringMap{ // "batch_test": pulumi.String("terraform"), @@ -384,7 +384,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := dataproc.NewBatch(ctx, "example_batch_autotuning", &dataproc.BatchArgs{ -// BatchId: pulumi.String("tf-test-batch_16511"), +// BatchId: pulumi.String("tf-test-batch_8493"), // Location: pulumi.String("us-central1"), // Labels: pulumi.StringMap{ // "batch_test": pulumi.String("terraform"), diff --git a/sdk/go/gcp/discoveryengine/dataStore.go b/sdk/go/gcp/discoveryengine/dataStore.go index 67441d839b..ce643a8ce5 100644 --- a/sdk/go/gcp/discoveryengine/dataStore.go +++ b/sdk/go/gcp/discoveryengine/dataStore.go @@ -104,6 +104,44 @@ import ( // } // // ``` +// ### Discoveryengine Datastore Advanced Site Search Config +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/discoveryengine" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := discoveryengine.NewDataStore(ctx, "advanced_site_search_config", &discoveryengine.DataStoreArgs{ +// Location: pulumi.String("global"), +// DataStoreId: pulumi.String("data-store-id"), +// DisplayName: pulumi.String("tf-test-advanced-site-search-config-datastore"), +// IndustryVertical: pulumi.String("GENERIC"), +// ContentConfig: pulumi.String("PUBLIC_WEBSITE"), +// SolutionTypes: pulumi.StringArray{ +// pulumi.String("SOLUTION_TYPE_CHAT"), +// }, +// CreateAdvancedSiteSearch: pulumi.Bool(true), +// SkipDefaultSchemaCreation: pulumi.Bool(false), +// AdvancedSiteSearchConfig: &discoveryengine.DataStoreAdvancedSiteSearchConfigArgs{ +// DisableInitialIndex: pulumi.Bool(true), +// DisableAutomaticRefresh: pulumi.Bool(true), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // @@ -131,6 +169,9 @@ import ( type DataStore struct { pulumi.CustomResourceState + // Configuration data for advance site search. + // Structure is documented below. + AdvancedSiteSearchConfig DataStoreAdvancedSiteSearchConfigPtrOutput `pulumi:"advancedSiteSearchConfig"` // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. ContentConfig pulumi.StringOutput `pulumi:"contentConfig"` @@ -224,6 +265,9 @@ func GetDataStore(ctx *pulumi.Context, // Input properties used for looking up and filtering DataStore resources. type dataStoreState struct { + // Configuration data for advance site search. + // Structure is documented below. + AdvancedSiteSearchConfig *DataStoreAdvancedSiteSearchConfig `pulumi:"advancedSiteSearchConfig"` // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. ContentConfig *string `pulumi:"contentConfig"` @@ -273,6 +317,9 @@ type dataStoreState struct { } type DataStoreState struct { + // Configuration data for advance site search. + // Structure is documented below. + AdvancedSiteSearchConfig DataStoreAdvancedSiteSearchConfigPtrInput // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. ContentConfig pulumi.StringPtrInput @@ -326,6 +373,9 @@ func (DataStoreState) ElementType() reflect.Type { } type dataStoreArgs struct { + // Configuration data for advance site search. + // Structure is documented below. + AdvancedSiteSearchConfig *DataStoreAdvancedSiteSearchConfig `pulumi:"advancedSiteSearchConfig"` // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. ContentConfig string `pulumi:"contentConfig"` @@ -367,6 +417,9 @@ type dataStoreArgs struct { // The set of arguments for constructing a DataStore resource. type DataStoreArgs struct { + // Configuration data for advance site search. + // Structure is documented below. + AdvancedSiteSearchConfig DataStoreAdvancedSiteSearchConfigPtrInput // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. ContentConfig pulumi.StringInput @@ -493,6 +546,12 @@ func (o DataStoreOutput) ToDataStoreOutputWithContext(ctx context.Context) DataS return o } +// Configuration data for advance site search. +// Structure is documented below. +func (o DataStoreOutput) AdvancedSiteSearchConfig() DataStoreAdvancedSiteSearchConfigPtrOutput { + return o.ApplyT(func(v *DataStore) DataStoreAdvancedSiteSearchConfigPtrOutput { return v.AdvancedSiteSearchConfig }).(DataStoreAdvancedSiteSearchConfigPtrOutput) +} + // The content config of the data store. // Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. func (o DataStoreOutput) ContentConfig() pulumi.StringOutput { diff --git a/sdk/go/gcp/discoveryengine/pulumiTypes.go b/sdk/go/gcp/discoveryengine/pulumiTypes.go index e0eea932c0..d5b94d944b 100644 --- a/sdk/go/gcp/discoveryengine/pulumiTypes.go +++ b/sdk/go/gcp/discoveryengine/pulumiTypes.go @@ -622,6 +622,162 @@ func (o ChatEngineCommonConfigPtrOutput) CompanyName() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +type DataStoreAdvancedSiteSearchConfig struct { + // If set true, automatic refresh is disabled for the DataStore. + DisableAutomaticRefresh *bool `pulumi:"disableAutomaticRefresh"` + // If set true, initial indexing is disabled for the DataStore. + DisableInitialIndex *bool `pulumi:"disableInitialIndex"` +} + +// DataStoreAdvancedSiteSearchConfigInput is an input type that accepts DataStoreAdvancedSiteSearchConfigArgs and DataStoreAdvancedSiteSearchConfigOutput values. +// You can construct a concrete instance of `DataStoreAdvancedSiteSearchConfigInput` via: +// +// DataStoreAdvancedSiteSearchConfigArgs{...} +type DataStoreAdvancedSiteSearchConfigInput interface { + pulumi.Input + + ToDataStoreAdvancedSiteSearchConfigOutput() DataStoreAdvancedSiteSearchConfigOutput + ToDataStoreAdvancedSiteSearchConfigOutputWithContext(context.Context) DataStoreAdvancedSiteSearchConfigOutput +} + +type DataStoreAdvancedSiteSearchConfigArgs struct { + // If set true, automatic refresh is disabled for the DataStore. + DisableAutomaticRefresh pulumi.BoolPtrInput `pulumi:"disableAutomaticRefresh"` + // If set true, initial indexing is disabled for the DataStore. + DisableInitialIndex pulumi.BoolPtrInput `pulumi:"disableInitialIndex"` +} + +func (DataStoreAdvancedSiteSearchConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*DataStoreAdvancedSiteSearchConfig)(nil)).Elem() +} + +func (i DataStoreAdvancedSiteSearchConfigArgs) ToDataStoreAdvancedSiteSearchConfigOutput() DataStoreAdvancedSiteSearchConfigOutput { + return i.ToDataStoreAdvancedSiteSearchConfigOutputWithContext(context.Background()) +} + +func (i DataStoreAdvancedSiteSearchConfigArgs) ToDataStoreAdvancedSiteSearchConfigOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(DataStoreAdvancedSiteSearchConfigOutput) +} + +func (i DataStoreAdvancedSiteSearchConfigArgs) ToDataStoreAdvancedSiteSearchConfigPtrOutput() DataStoreAdvancedSiteSearchConfigPtrOutput { + return i.ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(context.Background()) +} + +func (i DataStoreAdvancedSiteSearchConfigArgs) ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DataStoreAdvancedSiteSearchConfigOutput).ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(ctx) +} + +// DataStoreAdvancedSiteSearchConfigPtrInput is an input type that accepts DataStoreAdvancedSiteSearchConfigArgs, DataStoreAdvancedSiteSearchConfigPtr and DataStoreAdvancedSiteSearchConfigPtrOutput values. +// You can construct a concrete instance of `DataStoreAdvancedSiteSearchConfigPtrInput` via: +// +// DataStoreAdvancedSiteSearchConfigArgs{...} +// +// or: +// +// nil +type DataStoreAdvancedSiteSearchConfigPtrInput interface { + pulumi.Input + + ToDataStoreAdvancedSiteSearchConfigPtrOutput() DataStoreAdvancedSiteSearchConfigPtrOutput + ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(context.Context) DataStoreAdvancedSiteSearchConfigPtrOutput +} + +type dataStoreAdvancedSiteSearchConfigPtrType DataStoreAdvancedSiteSearchConfigArgs + +func DataStoreAdvancedSiteSearchConfigPtr(v *DataStoreAdvancedSiteSearchConfigArgs) DataStoreAdvancedSiteSearchConfigPtrInput { + return (*dataStoreAdvancedSiteSearchConfigPtrType)(v) +} + +func (*dataStoreAdvancedSiteSearchConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**DataStoreAdvancedSiteSearchConfig)(nil)).Elem() +} + +func (i *dataStoreAdvancedSiteSearchConfigPtrType) ToDataStoreAdvancedSiteSearchConfigPtrOutput() DataStoreAdvancedSiteSearchConfigPtrOutput { + return i.ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(context.Background()) +} + +func (i *dataStoreAdvancedSiteSearchConfigPtrType) ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DataStoreAdvancedSiteSearchConfigPtrOutput) +} + +type DataStoreAdvancedSiteSearchConfigOutput struct{ *pulumi.OutputState } + +func (DataStoreAdvancedSiteSearchConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*DataStoreAdvancedSiteSearchConfig)(nil)).Elem() +} + +func (o DataStoreAdvancedSiteSearchConfigOutput) ToDataStoreAdvancedSiteSearchConfigOutput() DataStoreAdvancedSiteSearchConfigOutput { + return o +} + +func (o DataStoreAdvancedSiteSearchConfigOutput) ToDataStoreAdvancedSiteSearchConfigOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigOutput { + return o +} + +func (o DataStoreAdvancedSiteSearchConfigOutput) ToDataStoreAdvancedSiteSearchConfigPtrOutput() DataStoreAdvancedSiteSearchConfigPtrOutput { + return o.ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(context.Background()) +} + +func (o DataStoreAdvancedSiteSearchConfigOutput) ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v DataStoreAdvancedSiteSearchConfig) *DataStoreAdvancedSiteSearchConfig { + return &v + }).(DataStoreAdvancedSiteSearchConfigPtrOutput) +} + +// If set true, automatic refresh is disabled for the DataStore. +func (o DataStoreAdvancedSiteSearchConfigOutput) DisableAutomaticRefresh() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DataStoreAdvancedSiteSearchConfig) *bool { return v.DisableAutomaticRefresh }).(pulumi.BoolPtrOutput) +} + +// If set true, initial indexing is disabled for the DataStore. +func (o DataStoreAdvancedSiteSearchConfigOutput) DisableInitialIndex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DataStoreAdvancedSiteSearchConfig) *bool { return v.DisableInitialIndex }).(pulumi.BoolPtrOutput) +} + +type DataStoreAdvancedSiteSearchConfigPtrOutput struct{ *pulumi.OutputState } + +func (DataStoreAdvancedSiteSearchConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**DataStoreAdvancedSiteSearchConfig)(nil)).Elem() +} + +func (o DataStoreAdvancedSiteSearchConfigPtrOutput) ToDataStoreAdvancedSiteSearchConfigPtrOutput() DataStoreAdvancedSiteSearchConfigPtrOutput { + return o +} + +func (o DataStoreAdvancedSiteSearchConfigPtrOutput) ToDataStoreAdvancedSiteSearchConfigPtrOutputWithContext(ctx context.Context) DataStoreAdvancedSiteSearchConfigPtrOutput { + return o +} + +func (o DataStoreAdvancedSiteSearchConfigPtrOutput) Elem() DataStoreAdvancedSiteSearchConfigOutput { + return o.ApplyT(func(v *DataStoreAdvancedSiteSearchConfig) DataStoreAdvancedSiteSearchConfig { + if v != nil { + return *v + } + var ret DataStoreAdvancedSiteSearchConfig + return ret + }).(DataStoreAdvancedSiteSearchConfigOutput) +} + +// If set true, automatic refresh is disabled for the DataStore. +func (o DataStoreAdvancedSiteSearchConfigPtrOutput) DisableAutomaticRefresh() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DataStoreAdvancedSiteSearchConfig) *bool { + if v == nil { + return nil + } + return v.DisableAutomaticRefresh + }).(pulumi.BoolPtrOutput) +} + +// If set true, initial indexing is disabled for the DataStore. +func (o DataStoreAdvancedSiteSearchConfigPtrOutput) DisableInitialIndex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DataStoreAdvancedSiteSearchConfig) *bool { + if v == nil { + return nil + } + return v.DisableInitialIndex + }).(pulumi.BoolPtrOutput) +} + type DataStoreDocumentProcessingConfig struct { // Whether chunking mode is enabled. // Structure is documented below. @@ -2897,6 +3053,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ChatEngineChatEngineMetadataArrayInput)(nil)).Elem(), ChatEngineChatEngineMetadataArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ChatEngineCommonConfigInput)(nil)).Elem(), ChatEngineCommonConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ChatEngineCommonConfigPtrInput)(nil)).Elem(), ChatEngineCommonConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DataStoreAdvancedSiteSearchConfigInput)(nil)).Elem(), DataStoreAdvancedSiteSearchConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DataStoreAdvancedSiteSearchConfigPtrInput)(nil)).Elem(), DataStoreAdvancedSiteSearchConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DataStoreDocumentProcessingConfigInput)(nil)).Elem(), DataStoreDocumentProcessingConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DataStoreDocumentProcessingConfigPtrInput)(nil)).Elem(), DataStoreDocumentProcessingConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DataStoreDocumentProcessingConfigChunkingConfigInput)(nil)).Elem(), DataStoreDocumentProcessingConfigChunkingConfigArgs{}) @@ -2937,6 +3095,8 @@ func init() { pulumi.RegisterOutputType(ChatEngineChatEngineMetadataArrayOutput{}) pulumi.RegisterOutputType(ChatEngineCommonConfigOutput{}) pulumi.RegisterOutputType(ChatEngineCommonConfigPtrOutput{}) + pulumi.RegisterOutputType(DataStoreAdvancedSiteSearchConfigOutput{}) + pulumi.RegisterOutputType(DataStoreAdvancedSiteSearchConfigPtrOutput{}) pulumi.RegisterOutputType(DataStoreDocumentProcessingConfigOutput{}) pulumi.RegisterOutputType(DataStoreDocumentProcessingConfigPtrOutput{}) pulumi.RegisterOutputType(DataStoreDocumentProcessingConfigChunkingConfigOutput{}) diff --git a/sdk/go/gcp/edgenetwork/init.go b/sdk/go/gcp/edgenetwork/init.go index 689ff3b367..616efcfd2a 100644 --- a/sdk/go/gcp/edgenetwork/init.go +++ b/sdk/go/gcp/edgenetwork/init.go @@ -21,6 +21,8 @@ func (m *module) Version() semver.Version { func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { switch typ { + case "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment": + r = &InterconnectAttachment{} case "gcp:edgenetwork/network:Network": r = &Network{} case "gcp:edgenetwork/subnet:Subnet": @@ -38,6 +40,11 @@ func init() { if err != nil { version = semver.Version{Major: 1} } + pulumi.RegisterResourceModule( + "gcp", + "edgenetwork/interconnectAttachment", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "edgenetwork/network", diff --git a/sdk/go/gcp/edgenetwork/interconnectAttachment.go b/sdk/go/gcp/edgenetwork/interconnectAttachment.go new file mode 100644 index 0000000000..38bbf67b4e --- /dev/null +++ b/sdk/go/gcp/edgenetwork/interconnectAttachment.go @@ -0,0 +1,585 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package edgenetwork + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. +// +// To get more information about InterconnectAttachment, see: +// +// * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) +// * How-to Guides +// - [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) +// +// ## Example Usage +// +// ### Edgenetwork Interconnect Attachment +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/edgenetwork" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// exampleNetwork, err := edgenetwork.NewNetwork(ctx, "example_network", &edgenetwork.NetworkArgs{ +// NetworkId: pulumi.String("example-network"), +// Location: pulumi.String("us-west1"), +// Zone: pulumi.String(""), +// Description: pulumi.String("Example network."), +// Mtu: pulumi.Int(9000), +// }) +// if err != nil { +// return err +// } +// _, err = edgenetwork.NewInterconnectAttachment(ctx, "example_interconnect_attachment", &edgenetwork.InterconnectAttachmentArgs{ +// InterconnectAttachmentId: pulumi.String("example-interconnect-attachment"), +// Location: pulumi.String("us-west1"), +// Zone: pulumi.String(""), +// Description: pulumi.String("Example interconnect attachment."), +// Network: exampleNetwork.ID(), +// Interconnect: pulumi.String("11111111-2222-3333-4444-555555555555"), +// VlanId: pulumi.Int(55), +// Mtu: pulumi.Int(9000), +// Labels: pulumi.StringMap{ +// "environment": pulumi.String("dev"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// InterconnectAttachment can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` +// +// * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` +// +// * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` +// +// * `{{location}}/{{interconnect_attachment_id}}` +// +// * `{{name}}` +// +// When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} +// ``` +type InterconnectAttachment struct { + pulumi.CustomResourceState + + // The time when the resource was created. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrOutput `pulumi:"description"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // The ID of the underlying interconnect that this attachment's traffic will traverse through. + Interconnect pulumi.StringOutput `pulumi:"interconnect"` + // A unique ID that identifies this interconnect attachment. + // + // *** + InterconnectAttachmentId pulumi.StringOutput `pulumi:"interconnectAttachmentId"` + // Labels associated with this resource. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + Location pulumi.StringOutput `pulumi:"location"` + // IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // The canonical name of this resource, with format + // `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the network to which this interconnect attachment belongs. + // Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + Network pulumi.StringOutput `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // The time when the resource was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` + // VLAN ID provided by user. Must be site-wise unique. + VlanId pulumi.IntOutput `pulumi:"vlanId"` + // The name of the target Distributed Cloud Edge zone. + Zone pulumi.StringOutput `pulumi:"zone"` +} + +// NewInterconnectAttachment registers a new resource with the given unique name, arguments, and options. +func NewInterconnectAttachment(ctx *pulumi.Context, + name string, args *InterconnectAttachmentArgs, opts ...pulumi.ResourceOption) (*InterconnectAttachment, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Interconnect == nil { + return nil, errors.New("invalid value for required argument 'Interconnect'") + } + if args.InterconnectAttachmentId == nil { + return nil, errors.New("invalid value for required argument 'InterconnectAttachmentId'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.Network == nil { + return nil, errors.New("invalid value for required argument 'Network'") + } + if args.VlanId == nil { + return nil, errors.New("invalid value for required argument 'VlanId'") + } + if args.Zone == nil { + return nil, errors.New("invalid value for required argument 'Zone'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource InterconnectAttachment + err := ctx.RegisterResource("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetInterconnectAttachment gets an existing InterconnectAttachment resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetInterconnectAttachment(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *InterconnectAttachmentState, opts ...pulumi.ResourceOption) (*InterconnectAttachment, error) { + var resource InterconnectAttachment + err := ctx.ReadResource("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering InterconnectAttachment resources. +type interconnectAttachmentState struct { + // The time when the resource was created. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + CreateTime *string `pulumi:"createTime"` + // A free-text description of the resource. Max length 1024 characters. + Description *string `pulumi:"description"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // The ID of the underlying interconnect that this attachment's traffic will traverse through. + Interconnect *string `pulumi:"interconnect"` + // A unique ID that identifies this interconnect attachment. + // + // *** + InterconnectAttachmentId *string `pulumi:"interconnectAttachmentId"` + // Labels associated with this resource. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + Location *string `pulumi:"location"` + // IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + Mtu *int `pulumi:"mtu"` + // The canonical name of this resource, with format + // `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + Name *string `pulumi:"name"` + // The ID of the network to which this interconnect attachment belongs. + // Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + Network *string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // The time when the resource was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + UpdateTime *string `pulumi:"updateTime"` + // VLAN ID provided by user. Must be site-wise unique. + VlanId *int `pulumi:"vlanId"` + // The name of the target Distributed Cloud Edge zone. + Zone *string `pulumi:"zone"` +} + +type InterconnectAttachmentState struct { + // The time when the resource was created. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + CreateTime pulumi.StringPtrInput + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // The ID of the underlying interconnect that this attachment's traffic will traverse through. + Interconnect pulumi.StringPtrInput + // A unique ID that identifies this interconnect attachment. + // + // *** + InterconnectAttachmentId pulumi.StringPtrInput + // Labels associated with this resource. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + Location pulumi.StringPtrInput + // IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + Mtu pulumi.IntPtrInput + // The canonical name of this resource, with format + // `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + Name pulumi.StringPtrInput + // The ID of the network to which this interconnect attachment belongs. + // Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + Network pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // The time when the resource was last updated. + // A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + // fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + UpdateTime pulumi.StringPtrInput + // VLAN ID provided by user. Must be site-wise unique. + VlanId pulumi.IntPtrInput + // The name of the target Distributed Cloud Edge zone. + Zone pulumi.StringPtrInput +} + +func (InterconnectAttachmentState) ElementType() reflect.Type { + return reflect.TypeOf((*interconnectAttachmentState)(nil)).Elem() +} + +type interconnectAttachmentArgs struct { + // A free-text description of the resource. Max length 1024 characters. + Description *string `pulumi:"description"` + // The ID of the underlying interconnect that this attachment's traffic will traverse through. + Interconnect string `pulumi:"interconnect"` + // A unique ID that identifies this interconnect attachment. + // + // *** + InterconnectAttachmentId string `pulumi:"interconnectAttachmentId"` + // Labels associated with this resource. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + Location string `pulumi:"location"` + // IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + Mtu *int `pulumi:"mtu"` + // The ID of the network to which this interconnect attachment belongs. + // Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + Network string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // VLAN ID provided by user. Must be site-wise unique. + VlanId int `pulumi:"vlanId"` + // The name of the target Distributed Cloud Edge zone. + Zone string `pulumi:"zone"` +} + +// The set of arguments for constructing a InterconnectAttachment resource. +type InterconnectAttachmentArgs struct { + // A free-text description of the resource. Max length 1024 characters. + Description pulumi.StringPtrInput + // The ID of the underlying interconnect that this attachment's traffic will traverse through. + Interconnect pulumi.StringInput + // A unique ID that identifies this interconnect attachment. + // + // *** + InterconnectAttachmentId pulumi.StringInput + // Labels associated with this resource. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + Location pulumi.StringInput + // IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + Mtu pulumi.IntPtrInput + // The ID of the network to which this interconnect attachment belongs. + // Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + Network pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // VLAN ID provided by user. Must be site-wise unique. + VlanId pulumi.IntInput + // The name of the target Distributed Cloud Edge zone. + Zone pulumi.StringInput +} + +func (InterconnectAttachmentArgs) ElementType() reflect.Type { + return reflect.TypeOf((*interconnectAttachmentArgs)(nil)).Elem() +} + +type InterconnectAttachmentInput interface { + pulumi.Input + + ToInterconnectAttachmentOutput() InterconnectAttachmentOutput + ToInterconnectAttachmentOutputWithContext(ctx context.Context) InterconnectAttachmentOutput +} + +func (*InterconnectAttachment) ElementType() reflect.Type { + return reflect.TypeOf((**InterconnectAttachment)(nil)).Elem() +} + +func (i *InterconnectAttachment) ToInterconnectAttachmentOutput() InterconnectAttachmentOutput { + return i.ToInterconnectAttachmentOutputWithContext(context.Background()) +} + +func (i *InterconnectAttachment) ToInterconnectAttachmentOutputWithContext(ctx context.Context) InterconnectAttachmentOutput { + return pulumi.ToOutputWithContext(ctx, i).(InterconnectAttachmentOutput) +} + +// InterconnectAttachmentArrayInput is an input type that accepts InterconnectAttachmentArray and InterconnectAttachmentArrayOutput values. +// You can construct a concrete instance of `InterconnectAttachmentArrayInput` via: +// +// InterconnectAttachmentArray{ InterconnectAttachmentArgs{...} } +type InterconnectAttachmentArrayInput interface { + pulumi.Input + + ToInterconnectAttachmentArrayOutput() InterconnectAttachmentArrayOutput + ToInterconnectAttachmentArrayOutputWithContext(context.Context) InterconnectAttachmentArrayOutput +} + +type InterconnectAttachmentArray []InterconnectAttachmentInput + +func (InterconnectAttachmentArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*InterconnectAttachment)(nil)).Elem() +} + +func (i InterconnectAttachmentArray) ToInterconnectAttachmentArrayOutput() InterconnectAttachmentArrayOutput { + return i.ToInterconnectAttachmentArrayOutputWithContext(context.Background()) +} + +func (i InterconnectAttachmentArray) ToInterconnectAttachmentArrayOutputWithContext(ctx context.Context) InterconnectAttachmentArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(InterconnectAttachmentArrayOutput) +} + +// InterconnectAttachmentMapInput is an input type that accepts InterconnectAttachmentMap and InterconnectAttachmentMapOutput values. +// You can construct a concrete instance of `InterconnectAttachmentMapInput` via: +// +// InterconnectAttachmentMap{ "key": InterconnectAttachmentArgs{...} } +type InterconnectAttachmentMapInput interface { + pulumi.Input + + ToInterconnectAttachmentMapOutput() InterconnectAttachmentMapOutput + ToInterconnectAttachmentMapOutputWithContext(context.Context) InterconnectAttachmentMapOutput +} + +type InterconnectAttachmentMap map[string]InterconnectAttachmentInput + +func (InterconnectAttachmentMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*InterconnectAttachment)(nil)).Elem() +} + +func (i InterconnectAttachmentMap) ToInterconnectAttachmentMapOutput() InterconnectAttachmentMapOutput { + return i.ToInterconnectAttachmentMapOutputWithContext(context.Background()) +} + +func (i InterconnectAttachmentMap) ToInterconnectAttachmentMapOutputWithContext(ctx context.Context) InterconnectAttachmentMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(InterconnectAttachmentMapOutput) +} + +type InterconnectAttachmentOutput struct{ *pulumi.OutputState } + +func (InterconnectAttachmentOutput) ElementType() reflect.Type { + return reflect.TypeOf((**InterconnectAttachment)(nil)).Elem() +} + +func (o InterconnectAttachmentOutput) ToInterconnectAttachmentOutput() InterconnectAttachmentOutput { + return o +} + +func (o InterconnectAttachmentOutput) ToInterconnectAttachmentOutputWithContext(ctx context.Context) InterconnectAttachmentOutput { + return o +} + +// The time when the resource was created. +// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine +// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. +func (o InterconnectAttachmentOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// A free-text description of the resource. Max length 1024 characters. +func (o InterconnectAttachmentOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o InterconnectAttachmentOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// The ID of the underlying interconnect that this attachment's traffic will traverse through. +func (o InterconnectAttachmentOutput) Interconnect() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Interconnect }).(pulumi.StringOutput) +} + +// A unique ID that identifies this interconnect attachment. +// +// *** +func (o InterconnectAttachmentOutput) InterconnectAttachmentId() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.InterconnectAttachmentId }).(pulumi.StringOutput) +} + +// Labels associated with this resource. +// +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. +// Please refer to the field `effectiveLabels` for all of the labels present on the resource. +func (o InterconnectAttachmentOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The Google Cloud region to which the target Distributed Cloud Edge zone belongs. +func (o InterconnectAttachmentOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. +func (o InterconnectAttachmentOutput) Mtu() pulumi.IntPtrOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +} + +// The canonical name of this resource, with format +// `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` +func (o InterconnectAttachmentOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the network to which this interconnect attachment belongs. +// Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` +func (o InterconnectAttachmentOutput) Network() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Network }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o InterconnectAttachmentOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o InterconnectAttachmentOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// The time when the resource was last updated. +// A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine +// fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. +func (o InterconnectAttachmentOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +// VLAN ID provided by user. Must be site-wise unique. +func (o InterconnectAttachmentOutput) VlanId() pulumi.IntOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.IntOutput { return v.VlanId }).(pulumi.IntOutput) +} + +// The name of the target Distributed Cloud Edge zone. +func (o InterconnectAttachmentOutput) Zone() pulumi.StringOutput { + return o.ApplyT(func(v *InterconnectAttachment) pulumi.StringOutput { return v.Zone }).(pulumi.StringOutput) +} + +type InterconnectAttachmentArrayOutput struct{ *pulumi.OutputState } + +func (InterconnectAttachmentArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*InterconnectAttachment)(nil)).Elem() +} + +func (o InterconnectAttachmentArrayOutput) ToInterconnectAttachmentArrayOutput() InterconnectAttachmentArrayOutput { + return o +} + +func (o InterconnectAttachmentArrayOutput) ToInterconnectAttachmentArrayOutputWithContext(ctx context.Context) InterconnectAttachmentArrayOutput { + return o +} + +func (o InterconnectAttachmentArrayOutput) Index(i pulumi.IntInput) InterconnectAttachmentOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *InterconnectAttachment { + return vs[0].([]*InterconnectAttachment)[vs[1].(int)] + }).(InterconnectAttachmentOutput) +} + +type InterconnectAttachmentMapOutput struct{ *pulumi.OutputState } + +func (InterconnectAttachmentMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*InterconnectAttachment)(nil)).Elem() +} + +func (o InterconnectAttachmentMapOutput) ToInterconnectAttachmentMapOutput() InterconnectAttachmentMapOutput { + return o +} + +func (o InterconnectAttachmentMapOutput) ToInterconnectAttachmentMapOutputWithContext(ctx context.Context) InterconnectAttachmentMapOutput { + return o +} + +func (o InterconnectAttachmentMapOutput) MapIndex(k pulumi.StringInput) InterconnectAttachmentOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *InterconnectAttachment { + return vs[0].(map[string]*InterconnectAttachment)[vs[1].(string)] + }).(InterconnectAttachmentOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*InterconnectAttachmentInput)(nil)).Elem(), &InterconnectAttachment{}) + pulumi.RegisterInputType(reflect.TypeOf((*InterconnectAttachmentArrayInput)(nil)).Elem(), InterconnectAttachmentArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*InterconnectAttachmentMapInput)(nil)).Elem(), InterconnectAttachmentMap{}) + pulumi.RegisterOutputType(InterconnectAttachmentOutput{}) + pulumi.RegisterOutputType(InterconnectAttachmentArrayOutput{}) + pulumi.RegisterOutputType(InterconnectAttachmentMapOutput{}) +} diff --git a/sdk/go/gcp/firestore/field.go b/sdk/go/gcp/firestore/field.go index 8e0f3b2c17..3e2f9ee9db 100644 --- a/sdk/go/gcp/firestore/field.go +++ b/sdk/go/gcp/firestore/field.go @@ -59,7 +59,7 @@ import ( // _, err = firestore.NewField(ctx, "basic", &firestore.FieldArgs{ // Project: pulumi.String("my-project-name"), // Database: database.Name, -// Collection: pulumi.String("chatrooms__8493"), +// Collection: pulumi.String("chatrooms__9106"), // Field: pulumi.String("basic"), // IndexConfig: &firestore.FieldIndexConfigArgs{ // Indexes: firestore.FieldIndexConfigIndexArray{ @@ -150,7 +150,7 @@ import ( // _, err = firestore.NewField(ctx, "match_override", &firestore.FieldArgs{ // Project: pulumi.String("my-project-name"), // Database: database.Name, -// Collection: pulumi.String("chatrooms__9106"), +// Collection: pulumi.String("chatrooms__27169"), // Field: pulumi.String("field_with_same_configuration_as_ancestor"), // IndexConfig: &firestore.FieldIndexConfigArgs{ // Indexes: firestore.FieldIndexConfigIndexArray{ diff --git a/sdk/go/gcp/gemini/codeRepositoryIndex.go b/sdk/go/gcp/gemini/codeRepositoryIndex.go index da2b16830f..2e30fb7b5d 100644 --- a/sdk/go/gcp/gemini/codeRepositoryIndex.go +++ b/sdk/go/gcp/gemini/codeRepositoryIndex.go @@ -76,6 +76,8 @@ type CodeRepositoryIndex struct { CreateTime pulumi.StringOutput `pulumi:"createTime"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + ForceDestroy pulumi.BoolPtrOutput `pulumi:"forceDestroy"` // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. KmsKey pulumi.StringPtrOutput `pulumi:"kmsKey"` @@ -154,6 +156,8 @@ type codeRepositoryIndexState struct { CreateTime *string `pulumi:"createTime"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + ForceDestroy *bool `pulumi:"forceDestroy"` // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. KmsKey *string `pulumi:"kmsKey"` @@ -192,6 +196,8 @@ type CodeRepositoryIndexState struct { CreateTime pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapInput + // If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + ForceDestroy pulumi.BoolPtrInput // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. KmsKey pulumi.StringPtrInput @@ -230,6 +236,8 @@ type codeRepositoryIndexArgs struct { // // *** CodeRepositoryIndexId string `pulumi:"codeRepositoryIndexId"` + // If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + ForceDestroy *bool `pulumi:"forceDestroy"` // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. KmsKey *string `pulumi:"kmsKey"` @@ -250,6 +258,8 @@ type CodeRepositoryIndexArgs struct { // // *** CodeRepositoryIndexId pulumi.StringInput + // If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + ForceDestroy pulumi.BoolPtrInput // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. KmsKey pulumi.StringPtrInput @@ -368,6 +378,11 @@ func (o CodeRepositoryIndexOutput) EffectiveLabels() pulumi.StringMapOutput { return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) } +// If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. +func (o CodeRepositoryIndexOutput) ForceDestroy() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.BoolPtrOutput { return v.ForceDestroy }).(pulumi.BoolPtrOutput) +} + // Optional. Immutable. Customer-managed encryption key name, in the format // projects/*/locations/*/keyRings/*/cryptoKeys/*. func (o CodeRepositoryIndexOutput) KmsKey() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/gkehub/membershipBinding.go b/sdk/go/gcp/gkehub/membershipBinding.go index f24a3c0a70..d04300d307 100644 --- a/sdk/go/gcp/gkehub/membershipBinding.go +++ b/sdk/go/gcp/gkehub/membershipBinding.go @@ -51,7 +51,7 @@ import ( // return err // } // membership, err := gkehub.NewMembership(ctx, "membership", &gkehub.MembershipArgs{ -// MembershipId: pulumi.String("tf-test-membership_27169"), +// MembershipId: pulumi.String("tf-test-membership_75223"), // Endpoint: &gkehub.MembershipEndpointArgs{ // GkeCluster: &gkehub.MembershipEndpointGkeClusterArgs{ // ResourceLink: primary.ID().ApplyT(func(id string) (string, error) { @@ -66,13 +66,13 @@ import ( // return err // } // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_75223"), +// ScopeId: pulumi.String("tf-test-scope_41819"), // }) // if err != nil { // return err // } // _, err = gkehub.NewMembershipBinding(ctx, "membership_binding", &gkehub.MembershipBindingArgs{ -// MembershipBindingId: pulumi.String("tf-test-membership-binding_41819"), +// MembershipBindingId: pulumi.String("tf-test-membership-binding_75092"), // Scope: scope.Name, // MembershipId: membership.MembershipId, // Location: pulumi.String("global"), diff --git a/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go b/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go index 2beaa57474..0d581177c3 100644 --- a/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go +++ b/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go @@ -44,7 +44,7 @@ import ( // return err // } // membership, err := gkehub.NewMembership(ctx, "membership", &gkehub.MembershipArgs{ -// MembershipId: pulumi.String("tf-test-membership_75092"), +// MembershipId: pulumi.String("tf-test-membership_2605"), // Endpoint: &gkehub.MembershipEndpointArgs{ // GkeCluster: &gkehub.MembershipEndpointGkeClusterArgs{ // ResourceLink: primary.ID().ApplyT(func(id string) (string, error) { @@ -63,7 +63,7 @@ import ( // return err // } // _, err = gkehub.NewMembershipRbacRoleBinding(ctx, "membership_rbac_role_binding", &gkehub.MembershipRbacRoleBindingArgs{ -// MembershipRbacRoleBindingId: pulumi.String("tf-test-membership-rbac-role-binding_2605"), +// MembershipRbacRoleBindingId: pulumi.String("tf-test-membership-rbac-role-binding_34535"), // MembershipId: membership.MembershipId, // User: pulumi.Sprintf("service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com", project.Number), // Role: &gkehub.MembershipRbacRoleBindingRoleArgs{ diff --git a/sdk/go/gcp/gkehub/namespace.go b/sdk/go/gcp/gkehub/namespace.go index ffe32d8b36..d2d67707bc 100644 --- a/sdk/go/gcp/gkehub/namespace.go +++ b/sdk/go/gcp/gkehub/namespace.go @@ -37,13 +37,13 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_34535"), +// ScopeId: pulumi.String("tf-test-scope_22375"), // }) // if err != nil { // return err // } // _, err = gkehub.NewNamespace(ctx, "namespace", &gkehub.NamespaceArgs{ -// ScopeNamespaceId: pulumi.String("tf-test-namespace_22375"), +// ScopeNamespaceId: pulumi.String("tf-test-namespace_29439"), // ScopeId: scope.ScopeId, // Scope: scope.Name, // NamespaceLabels: pulumi.StringMap{ diff --git a/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go b/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go index 5a4806cdca..63e3b259e8 100644 --- a/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go +++ b/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go @@ -37,13 +37,13 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_29439"), +// ScopeId: pulumi.String("tf-test-scope_87786"), // }) // if err != nil { // return err // } // _, err = gkehub.NewScopeRbacRoleBinding(ctx, "scope_rbac_role_binding", &gkehub.ScopeRbacRoleBindingArgs{ -// ScopeRbacRoleBindingId: pulumi.String("tf-test-scope-rbac-role-binding_87786"), +// ScopeRbacRoleBindingId: pulumi.String("tf-test-scope-rbac-role-binding_2067"), // ScopeId: scope.ScopeId, // User: pulumi.String("test-email@gmail.com"), // Role: &gkehub.ScopeRbacRoleBindingRoleArgs{ diff --git a/sdk/go/gcp/iap/tunnelDestGroup.go b/sdk/go/gcp/iap/tunnelDestGroup.go index 22f8f35a6d..c743ea564c 100644 --- a/sdk/go/gcp/iap/tunnelDestGroup.go +++ b/sdk/go/gcp/iap/tunnelDestGroup.go @@ -38,7 +38,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := iap.NewTunnelDestGroup(ctx, "dest_group", &iap.TunnelDestGroupArgs{ // Region: pulumi.String("us-central1"), -// GroupName: pulumi.String("testgroup_2067"), +// GroupName: pulumi.String("testgroup_40785"), // Cidrs: pulumi.StringArray{ // pulumi.String("10.1.0.0/16"), // pulumi.String("192.168.10.0/24"), diff --git a/sdk/go/gcp/integrationconnectors/managedZone.go b/sdk/go/gcp/integrationconnectors/managedZone.go index 2169dc4fbe..527e6f0d00 100644 --- a/sdk/go/gcp/integrationconnectors/managedZone.go +++ b/sdk/go/gcp/integrationconnectors/managedZone.go @@ -43,8 +43,8 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // targetProject, err := organizations.NewProject(ctx, "target_project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test_40785"), -// Name: pulumi.String("tf-test_79169"), +// ProjectId: pulumi.String("tf-test_79169"), +// Name: pulumi.String("tf-test_56529"), // OrgId: pulumi.String("123456789"), // BillingAccount: pulumi.String("000000-0000000-0000000-000000"), // DeletionPolicy: pulumi.String("DELETE"), @@ -89,8 +89,8 @@ import ( // return err // } // zone, err := dns.NewManagedZone(ctx, "zone", &dns.ManagedZoneArgs{ -// Name: pulumi.String("tf-test-dns_56529"), -// DnsName: pulumi.String("private_75413.example.com."), +// Name: pulumi.String("tf-test-dns_75413"), +// DnsName: pulumi.String("private_55138.example.com."), // Visibility: pulumi.String("private"), // PrivateVisibilityConfig: &dns.ManagedZonePrivateVisibilityConfigArgs{ // Networks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{ diff --git a/sdk/go/gcp/networkconnectivity/spoke.go b/sdk/go/gcp/networkconnectivity/spoke.go index eb564ec6ee..77d758bf90 100644 --- a/sdk/go/gcp/networkconnectivity/spoke.go +++ b/sdk/go/gcp/networkconnectivity/spoke.go @@ -167,14 +167,14 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ -// Name: pulumi.String("tf-test-network_55138"), +// Name: pulumi.String("tf-test-network_37559"), // AutoCreateSubnetworks: pulumi.Bool(false), // }) // if err != nil { // return err // } // subnetwork, err := compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{ -// Name: pulumi.String("tf-test-subnet_37559"), +// Name: pulumi.String("tf-test-subnet_91980"), // IpCidrRange: pulumi.String("10.0.0.0/28"), // Region: pulumi.String("us-central1"), // Network: network.SelfLink, @@ -183,7 +183,7 @@ import ( // return err // } // instance, err := compute.NewInstance(ctx, "instance", &compute.InstanceArgs{ -// Name: pulumi.String("tf-test-instance_91980"), +// Name: pulumi.String("tf-test-instance_37118"), // MachineType: pulumi.String("e2-medium"), // CanIpForward: pulumi.Bool(true), // Zone: pulumi.String("us-central1-a"), @@ -208,7 +208,7 @@ import ( // return err // } // basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{ -// Name: pulumi.String("tf-test-hub_37118"), +// Name: pulumi.String("tf-test-hub_80332"), // Description: pulumi.String("A sample hub"), // Labels: pulumi.StringMap{ // "label-two": pulumi.String("value-one"), @@ -218,7 +218,7 @@ import ( // return err // } // _, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{ -// Name: pulumi.String("tf-test-name_80332"), +// Name: pulumi.String("tf-test-name_13293"), // Location: pulumi.String("us-central1"), // Description: pulumi.String("A sample spoke with a linked routher appliance instance"), // Labels: pulumi.StringMap{ @@ -641,8 +641,8 @@ import ( // Hub: starHub.ID(), // AutoAccept: &networkconnectivity.GroupAutoAcceptArgs{ // AutoAcceptProjects: pulumi.StringArray{ -// pulumi.String("foo_13293"), -// pulumi.String("bar_40289"), +// pulumi.String("foo_40289"), +// pulumi.String("bar_33395"), // }, // }, // }) diff --git a/sdk/go/gcp/networksecurity/authzPolicy.go b/sdk/go/gcp/networksecurity/authzPolicy.go index 4ba02d6248..bfd82fb834 100644 --- a/sdk/go/gcp/networksecurity/authzPolicy.go +++ b/sdk/go/gcp/networksecurity/authzPolicy.go @@ -20,176 +20,6 @@ import ( // // ## Example Usage // -// ### Network Services Authz Policy Advanced -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity" -// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkservices" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{ -// Name: pulumi.String("lb-network"), -// Project: pulumi.String("my-project-name"), -// AutoCreateSubnetworks: pulumi.Bool(false), -// }) -// if err != nil { -// return err -// } -// defaultSubnetwork, err := compute.NewSubnetwork(ctx, "default", &compute.SubnetworkArgs{ -// Name: pulumi.String("backend-subnet"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// IpCidrRange: pulumi.String("10.1.2.0/24"), -// Network: _default.ID(), -// }) -// if err != nil { -// return err -// } -// proxyOnly, err := compute.NewSubnetwork(ctx, "proxy_only", &compute.SubnetworkArgs{ -// Name: pulumi.String("proxy-only-subnet"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// IpCidrRange: pulumi.String("10.129.0.0/23"), -// Purpose: pulumi.String("REGIONAL_MANAGED_PROXY"), -// Role: pulumi.String("ACTIVE"), -// Network: _default.ID(), -// }) -// if err != nil { -// return err -// } -// defaultAddress, err := compute.NewAddress(ctx, "default", &compute.AddressArgs{ -// Name: pulumi.String("l7-ilb-ip-address"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// Subnetwork: defaultSubnetwork.ID(), -// AddressType: pulumi.String("INTERNAL"), -// Purpose: pulumi.String("GCE_ENDPOINT"), -// }) -// if err != nil { -// return err -// } -// defaultRegionHealthCheck, err := compute.NewRegionHealthCheck(ctx, "default", &compute.RegionHealthCheckArgs{ -// Name: pulumi.String("l7-ilb-basic-check"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// HttpHealthCheck: &compute.RegionHealthCheckHttpHealthCheckArgs{ -// PortSpecification: pulumi.String("USE_SERVING_PORT"), -// }, -// }) -// if err != nil { -// return err -// } -// urlMap, err := compute.NewRegionBackendService(ctx, "url_map", &compute.RegionBackendServiceArgs{ -// Name: pulumi.String("l7-ilb-backend-service"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"), -// HealthChecks: defaultRegionHealthCheck.ID(), -// }) -// if err != nil { -// return err -// } -// defaultRegionUrlMap, err := compute.NewRegionUrlMap(ctx, "default", &compute.RegionUrlMapArgs{ -// Name: pulumi.String("l7-ilb-map"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// DefaultService: urlMap.ID(), -// }) -// if err != nil { -// return err -// } -// defaultRegionTargetHttpProxy, err := compute.NewRegionTargetHttpProxy(ctx, "default", &compute.RegionTargetHttpProxyArgs{ -// Name: pulumi.String("l7-ilb-proxy"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// UrlMap: defaultRegionUrlMap.ID(), -// }) -// if err != nil { -// return err -// } -// defaultForwardingRule, err := compute.NewForwardingRule(ctx, "default", &compute.ForwardingRuleArgs{ -// Name: pulumi.String("l7-ilb-forwarding-rule"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"), -// Network: _default.ID(), -// Subnetwork: defaultSubnetwork.ID(), -// IpProtocol: pulumi.String("TCP"), -// PortRange: pulumi.String("80"), -// Target: defaultRegionTargetHttpProxy.ID(), -// IpAddress: defaultAddress.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// proxyOnly, -// })) -// if err != nil { -// return err -// } -// authzExtension, err := compute.NewRegionBackendService(ctx, "authz_extension", &compute.RegionBackendServiceArgs{ -// Name: pulumi.String("authz-service"), -// Project: pulumi.String("my-project-name"), -// Region: pulumi.String("us-west1"), -// Protocol: pulumi.String("HTTP2"), -// LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"), -// PortName: pulumi.String("grpc"), -// }) -// if err != nil { -// return err -// } -// defaultAuthzExtension, err := networkservices.NewAuthzExtension(ctx, "default", &networkservices.AuthzExtensionArgs{ -// Name: pulumi.String("my-authz-ext"), -// Project: pulumi.String("my-project-name"), -// Location: pulumi.String("us-west1"), -// Description: pulumi.String("my description"), -// LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"), -// Authority: pulumi.String("ext11.com"), -// Service: authzExtension.SelfLink, -// Timeout: pulumi.String("0.1s"), -// FailOpen: pulumi.Bool(false), -// ForwardHeaders: pulumi.StringArray{ -// pulumi.String("Authorization"), -// }, -// }) -// if err != nil { -// return err -// } -// _, err = networksecurity.NewAuthzPolicy(ctx, "default", &networksecurity.AuthzPolicyArgs{ -// Name: pulumi.String("my-authz-policy"), -// Project: pulumi.String("my-project-name"), -// Location: pulumi.String("us-west1"), -// Description: pulumi.String("my description"), -// Target: &networksecurity.AuthzPolicyTargetArgs{ -// LoadBalancingScheme: pulumi.String("INTERNAL_MANAGED"), -// Resources: pulumi.StringArray{ -// defaultForwardingRule.SelfLink, -// }, -// }, -// Action: pulumi.String("CUSTOM"), -// CustomProvider: &networksecurity.AuthzPolicyCustomProviderArgs{ -// AuthzExtension: &networksecurity.AuthzPolicyCustomProviderAuthzExtensionArgs{ -// Resources: pulumi.StringArray{ -// defaultAuthzExtension.ID(), -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // AuthzPolicy can be imported using any of these accepted formats: diff --git a/sdk/go/gcp/orgpolicy/policy.go b/sdk/go/gcp/orgpolicy/policy.go index 6bc20be781..1cb35edf60 100644 --- a/sdk/go/gcp/orgpolicy/policy.go +++ b/sdk/go/gcp/orgpolicy/policy.go @@ -230,7 +230,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // constraint, err := orgpolicy.NewCustomConstraint(ctx, "constraint", &orgpolicy.CustomConstraintArgs{ -// Name: pulumi.String("custom.disableGkeAutoUpgrade_76044"), +// Name: pulumi.String("custom.disableGkeAutoUpgrade_69391"), // Parent: pulumi.String("organizations/123456789"), // DisplayName: pulumi.String("Disable GKE auto upgrade"), // Description: pulumi.String("Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced."), diff --git a/sdk/go/gcp/parametermanager/getRegionalParameter.go b/sdk/go/gcp/parametermanager/getRegionalParameter.go new file mode 100644 index 0000000000..5aaa8bf503 --- /dev/null +++ b/sdk/go/gcp/parametermanager/getRegionalParameter.go @@ -0,0 +1,166 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.LookupRegionalParameter(ctx, ¶metermanager.LookupRegionalParameterArgs{ +// ParameterId: "foobar", +// Location: "us-central1", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupRegionalParameter(ctx *pulumi.Context, args *LookupRegionalParameterArgs, opts ...pulumi.InvokeOption) (*LookupRegionalParameterResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupRegionalParameterResult + err := ctx.Invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getRegionalParameter. +type LookupRegionalParameterArgs struct { + // The location of the regional parameter. eg us-central1 + Location string `pulumi:"location"` + // The name of the regional parameter. + ParameterId string `pulumi:"parameterId"` + // The ID of the project in which the resource belongs. + Project *string `pulumi:"project"` +} + +// A collection of values returned by getRegionalParameter. +type LookupRegionalParameterResult struct { + CreateTime string `pulumi:"createTime"` + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + Format string `pulumi:"format"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Labels map[string]string `pulumi:"labels"` + Location string `pulumi:"location"` + Name string `pulumi:"name"` + ParameterId string `pulumi:"parameterId"` + PolicyMembers []GetRegionalParameterPolicyMember `pulumi:"policyMembers"` + Project *string `pulumi:"project"` + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + UpdateTime string `pulumi:"updateTime"` +} + +func LookupRegionalParameterOutput(ctx *pulumi.Context, args LookupRegionalParameterOutputArgs, opts ...pulumi.InvokeOption) LookupRegionalParameterResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupRegionalParameterResultOutput, error) { + args := v.(LookupRegionalParameterArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("gcp:parametermanager/getRegionalParameter:getRegionalParameter", args, LookupRegionalParameterResultOutput{}, options).(LookupRegionalParameterResultOutput), nil + }).(LookupRegionalParameterResultOutput) +} + +// A collection of arguments for invoking getRegionalParameter. +type LookupRegionalParameterOutputArgs struct { + // The location of the regional parameter. eg us-central1 + Location pulumi.StringInput `pulumi:"location"` + // The name of the regional parameter. + ParameterId pulumi.StringInput `pulumi:"parameterId"` + // The ID of the project in which the resource belongs. + Project pulumi.StringPtrInput `pulumi:"project"` +} + +func (LookupRegionalParameterOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupRegionalParameterArgs)(nil)).Elem() +} + +// A collection of values returned by getRegionalParameter. +type LookupRegionalParameterResultOutput struct{ *pulumi.OutputState } + +func (LookupRegionalParameterResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupRegionalParameterResult)(nil)).Elem() +} + +func (o LookupRegionalParameterResultOutput) ToLookupRegionalParameterResultOutput() LookupRegionalParameterResultOutput { + return o +} + +func (o LookupRegionalParameterResultOutput) ToLookupRegionalParameterResultOutputWithContext(ctx context.Context) LookupRegionalParameterResultOutput { + return o +} + +func (o LookupRegionalParameterResultOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.CreateTime }).(pulumi.StringOutput) +} + +func (o LookupRegionalParameterResultOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) map[string]string { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +func (o LookupRegionalParameterResultOutput) Format() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.Format }).(pulumi.StringOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o LookupRegionalParameterResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupRegionalParameterResultOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) map[string]string { return v.Labels }).(pulumi.StringMapOutput) +} + +func (o LookupRegionalParameterResultOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.Location }).(pulumi.StringOutput) +} + +func (o LookupRegionalParameterResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o LookupRegionalParameterResultOutput) ParameterId() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.ParameterId }).(pulumi.StringOutput) +} + +func (o LookupRegionalParameterResultOutput) PolicyMembers() GetRegionalParameterPolicyMemberArrayOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) []GetRegionalParameterPolicyMember { return v.PolicyMembers }).(GetRegionalParameterPolicyMemberArrayOutput) +} + +func (o LookupRegionalParameterResultOutput) Project() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) *string { return v.Project }).(pulumi.StringPtrOutput) +} + +func (o LookupRegionalParameterResultOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) map[string]string { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +func (o LookupRegionalParameterResultOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v LookupRegionalParameterResult) string { return v.UpdateTime }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupRegionalParameterResultOutput{}) +} diff --git a/sdk/go/gcp/parametermanager/init.go b/sdk/go/gcp/parametermanager/init.go new file mode 100644 index 0000000000..dfe694a243 --- /dev/null +++ b/sdk/go/gcp/parametermanager/init.go @@ -0,0 +1,58 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "gcp:parametermanager/parameter:Parameter": + r = &Parameter{} + case "gcp:parametermanager/regionalParameter:RegionalParameter": + r = &RegionalParameter{} + case "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion": + r = &RegionalParameterVersion{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "parametermanager/parameter", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "parametermanager/regionalParameter", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "parametermanager/regionalParameterVersion", + &module{version}, + ) +} diff --git a/sdk/go/gcp/parametermanager/parameter.go b/sdk/go/gcp/parametermanager/parameter.go new file mode 100644 index 0000000000..c80c609bc7 --- /dev/null +++ b/sdk/go/gcp/parametermanager/parameter.go @@ -0,0 +1,545 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Parameter Config Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewParameter(ctx, "parameter-basic", ¶metermanager.ParameterArgs{ +// ParameterId: pulumi.String("parameter"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Parameter With Format +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewParameter(ctx, "parameter-with-format", ¶metermanager.ParameterArgs{ +// ParameterId: pulumi.String("parameter"), +// Format: pulumi.String("JSON"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Parameter With Labels +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewParameter(ctx, "parameter-with-labels", ¶metermanager.ParameterArgs{ +// ParameterId: pulumi.String("parameter"), +// Labels: pulumi.StringMap{ +// "key1": pulumi.String("val1"), +// "key2": pulumi.String("val2"), +// "key3": pulumi.String("val3"), +// "key4": pulumi.String("val4"), +// "key5": pulumi.String("val5"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// Parameter can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` +// +// * `{{project}}/{{parameter_id}}` +// +// * `{{parameter_id}}` +// +// When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} +// ``` +type Parameter struct { + pulumi.CustomResourceState + + // The time at which the Parameter was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // The format type of the parameter resource. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrOutput `pulumi:"format"` + // The labels assigned to this Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The resource name of the Parameter. Format: + // `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + Name pulumi.StringOutput `pulumi:"name"` + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringOutput `pulumi:"parameterId"` + // Policy member strings of a Google Cloud resource. + // Structure is documented below. + PolicyMembers ParameterPolicyMemberArrayOutput `pulumi:"policyMembers"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // The time at which the Parameter was updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewParameter registers a new resource with the given unique name, arguments, and options. +func NewParameter(ctx *pulumi.Context, + name string, args *ParameterArgs, opts ...pulumi.ResourceOption) (*Parameter, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ParameterId == nil { + return nil, errors.New("invalid value for required argument 'ParameterId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Parameter + err := ctx.RegisterResource("gcp:parametermanager/parameter:Parameter", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetParameter gets an existing Parameter resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetParameter(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ParameterState, opts ...pulumi.ResourceOption) (*Parameter, error) { + var resource Parameter + err := ctx.ReadResource("gcp:parametermanager/parameter:Parameter", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Parameter resources. +type parameterState struct { + // The time at which the Parameter was created. + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // The format type of the parameter resource. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format *string `pulumi:"format"` + // The labels assigned to this Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The resource name of the Parameter. Format: + // `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + Name *string `pulumi:"name"` + // This must be unique within the project. + // + // *** + ParameterId *string `pulumi:"parameterId"` + // Policy member strings of a Google Cloud resource. + // Structure is documented below. + PolicyMembers []ParameterPolicyMember `pulumi:"policyMembers"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // The time at which the Parameter was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type ParameterState struct { + // The time at which the Parameter was created. + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // The format type of the parameter resource. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrInput + // The labels assigned to this Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The resource name of the Parameter. Format: + // `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + Name pulumi.StringPtrInput + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringPtrInput + // Policy member strings of a Google Cloud resource. + // Structure is documented below. + PolicyMembers ParameterPolicyMemberArrayInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // The time at which the Parameter was updated. + UpdateTime pulumi.StringPtrInput +} + +func (ParameterState) ElementType() reflect.Type { + return reflect.TypeOf((*parameterState)(nil)).Elem() +} + +type parameterArgs struct { + // The format type of the parameter resource. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format *string `pulumi:"format"` + // The labels assigned to this Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // This must be unique within the project. + // + // *** + ParameterId string `pulumi:"parameterId"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a Parameter resource. +type ParameterArgs struct { + // The format type of the parameter resource. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrInput + // The labels assigned to this Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (ParameterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*parameterArgs)(nil)).Elem() +} + +type ParameterInput interface { + pulumi.Input + + ToParameterOutput() ParameterOutput + ToParameterOutputWithContext(ctx context.Context) ParameterOutput +} + +func (*Parameter) ElementType() reflect.Type { + return reflect.TypeOf((**Parameter)(nil)).Elem() +} + +func (i *Parameter) ToParameterOutput() ParameterOutput { + return i.ToParameterOutputWithContext(context.Background()) +} + +func (i *Parameter) ToParameterOutputWithContext(ctx context.Context) ParameterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ParameterOutput) +} + +// ParameterArrayInput is an input type that accepts ParameterArray and ParameterArrayOutput values. +// You can construct a concrete instance of `ParameterArrayInput` via: +// +// ParameterArray{ ParameterArgs{...} } +type ParameterArrayInput interface { + pulumi.Input + + ToParameterArrayOutput() ParameterArrayOutput + ToParameterArrayOutputWithContext(context.Context) ParameterArrayOutput +} + +type ParameterArray []ParameterInput + +func (ParameterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Parameter)(nil)).Elem() +} + +func (i ParameterArray) ToParameterArrayOutput() ParameterArrayOutput { + return i.ToParameterArrayOutputWithContext(context.Background()) +} + +func (i ParameterArray) ToParameterArrayOutputWithContext(ctx context.Context) ParameterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ParameterArrayOutput) +} + +// ParameterMapInput is an input type that accepts ParameterMap and ParameterMapOutput values. +// You can construct a concrete instance of `ParameterMapInput` via: +// +// ParameterMap{ "key": ParameterArgs{...} } +type ParameterMapInput interface { + pulumi.Input + + ToParameterMapOutput() ParameterMapOutput + ToParameterMapOutputWithContext(context.Context) ParameterMapOutput +} + +type ParameterMap map[string]ParameterInput + +func (ParameterMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Parameter)(nil)).Elem() +} + +func (i ParameterMap) ToParameterMapOutput() ParameterMapOutput { + return i.ToParameterMapOutputWithContext(context.Background()) +} + +func (i ParameterMap) ToParameterMapOutputWithContext(ctx context.Context) ParameterMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ParameterMapOutput) +} + +type ParameterOutput struct{ *pulumi.OutputState } + +func (ParameterOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Parameter)(nil)).Elem() +} + +func (o ParameterOutput) ToParameterOutput() ParameterOutput { + return o +} + +func (o ParameterOutput) ToParameterOutputWithContext(ctx context.Context) ParameterOutput { + return o +} + +// The time at which the Parameter was created. +func (o ParameterOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o ParameterOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// The format type of the parameter resource. +// Default value is `UNFORMATTED`. +// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. +func (o ParameterOutput) Format() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringPtrOutput { return v.Format }).(pulumi.StringPtrOutput) +} + +// The labels assigned to this Parameter. +// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, +// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} +// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, +// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} +// No more than 64 labels can be assigned to a given resource. +// An object containing a list of "key": value pairs. Example: +// { "name": "wrench", "mass": "1.3kg", "count": "3" }. +// +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. +// Please refer to the field `effectiveLabels` for all of the labels present on the resource. +func (o ParameterOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The resource name of the Parameter. Format: +// `projects/{{project}}/locations/global/parameters/{{parameter_id}}` +func (o ParameterOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// This must be unique within the project. +// +// *** +func (o ParameterOutput) ParameterId() pulumi.StringOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringOutput { return v.ParameterId }).(pulumi.StringOutput) +} + +// Policy member strings of a Google Cloud resource. +// Structure is documented below. +func (o ParameterOutput) PolicyMembers() ParameterPolicyMemberArrayOutput { + return o.ApplyT(func(v *Parameter) ParameterPolicyMemberArrayOutput { return v.PolicyMembers }).(ParameterPolicyMemberArrayOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o ParameterOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o ParameterOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// The time at which the Parameter was updated. +func (o ParameterOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Parameter) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type ParameterArrayOutput struct{ *pulumi.OutputState } + +func (ParameterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Parameter)(nil)).Elem() +} + +func (o ParameterArrayOutput) ToParameterArrayOutput() ParameterArrayOutput { + return o +} + +func (o ParameterArrayOutput) ToParameterArrayOutputWithContext(ctx context.Context) ParameterArrayOutput { + return o +} + +func (o ParameterArrayOutput) Index(i pulumi.IntInput) ParameterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Parameter { + return vs[0].([]*Parameter)[vs[1].(int)] + }).(ParameterOutput) +} + +type ParameterMapOutput struct{ *pulumi.OutputState } + +func (ParameterMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Parameter)(nil)).Elem() +} + +func (o ParameterMapOutput) ToParameterMapOutput() ParameterMapOutput { + return o +} + +func (o ParameterMapOutput) ToParameterMapOutputWithContext(ctx context.Context) ParameterMapOutput { + return o +} + +func (o ParameterMapOutput) MapIndex(k pulumi.StringInput) ParameterOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Parameter { + return vs[0].(map[string]*Parameter)[vs[1].(string)] + }).(ParameterOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ParameterInput)(nil)).Elem(), &Parameter{}) + pulumi.RegisterInputType(reflect.TypeOf((*ParameterArrayInput)(nil)).Elem(), ParameterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ParameterMapInput)(nil)).Elem(), ParameterMap{}) + pulumi.RegisterOutputType(ParameterOutput{}) + pulumi.RegisterOutputType(ParameterArrayOutput{}) + pulumi.RegisterOutputType(ParameterMapOutput{}) +} diff --git a/sdk/go/gcp/parametermanager/pulumiTypes.go b/sdk/go/gcp/parametermanager/pulumiTypes.go new file mode 100644 index 0000000000..1da1e825b2 --- /dev/null +++ b/sdk/go/gcp/parametermanager/pulumiTypes.go @@ -0,0 +1,407 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type ParameterPolicyMember struct { + // (Output) + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + // resource is deleted and recreated with the same name, the binding will be applicable to the + // new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + IamPolicyNamePrincipal *string `pulumi:"iamPolicyNamePrincipal"` + // (Output) + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + // If a resource is deleted and recreated with the same name, the binding will not be applicable to the + // new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + IamPolicyUidPrincipal *string `pulumi:"iamPolicyUidPrincipal"` +} + +// ParameterPolicyMemberInput is an input type that accepts ParameterPolicyMemberArgs and ParameterPolicyMemberOutput values. +// You can construct a concrete instance of `ParameterPolicyMemberInput` via: +// +// ParameterPolicyMemberArgs{...} +type ParameterPolicyMemberInput interface { + pulumi.Input + + ToParameterPolicyMemberOutput() ParameterPolicyMemberOutput + ToParameterPolicyMemberOutputWithContext(context.Context) ParameterPolicyMemberOutput +} + +type ParameterPolicyMemberArgs struct { + // (Output) + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + // resource is deleted and recreated with the same name, the binding will be applicable to the + // new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + IamPolicyNamePrincipal pulumi.StringPtrInput `pulumi:"iamPolicyNamePrincipal"` + // (Output) + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + // If a resource is deleted and recreated with the same name, the binding will not be applicable to the + // new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + IamPolicyUidPrincipal pulumi.StringPtrInput `pulumi:"iamPolicyUidPrincipal"` +} + +func (ParameterPolicyMemberArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ParameterPolicyMember)(nil)).Elem() +} + +func (i ParameterPolicyMemberArgs) ToParameterPolicyMemberOutput() ParameterPolicyMemberOutput { + return i.ToParameterPolicyMemberOutputWithContext(context.Background()) +} + +func (i ParameterPolicyMemberArgs) ToParameterPolicyMemberOutputWithContext(ctx context.Context) ParameterPolicyMemberOutput { + return pulumi.ToOutputWithContext(ctx, i).(ParameterPolicyMemberOutput) +} + +// ParameterPolicyMemberArrayInput is an input type that accepts ParameterPolicyMemberArray and ParameterPolicyMemberArrayOutput values. +// You can construct a concrete instance of `ParameterPolicyMemberArrayInput` via: +// +// ParameterPolicyMemberArray{ ParameterPolicyMemberArgs{...} } +type ParameterPolicyMemberArrayInput interface { + pulumi.Input + + ToParameterPolicyMemberArrayOutput() ParameterPolicyMemberArrayOutput + ToParameterPolicyMemberArrayOutputWithContext(context.Context) ParameterPolicyMemberArrayOutput +} + +type ParameterPolicyMemberArray []ParameterPolicyMemberInput + +func (ParameterPolicyMemberArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ParameterPolicyMember)(nil)).Elem() +} + +func (i ParameterPolicyMemberArray) ToParameterPolicyMemberArrayOutput() ParameterPolicyMemberArrayOutput { + return i.ToParameterPolicyMemberArrayOutputWithContext(context.Background()) +} + +func (i ParameterPolicyMemberArray) ToParameterPolicyMemberArrayOutputWithContext(ctx context.Context) ParameterPolicyMemberArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ParameterPolicyMemberArrayOutput) +} + +type ParameterPolicyMemberOutput struct{ *pulumi.OutputState } + +func (ParameterPolicyMemberOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ParameterPolicyMember)(nil)).Elem() +} + +func (o ParameterPolicyMemberOutput) ToParameterPolicyMemberOutput() ParameterPolicyMemberOutput { + return o +} + +func (o ParameterPolicyMemberOutput) ToParameterPolicyMemberOutputWithContext(ctx context.Context) ParameterPolicyMemberOutput { + return o +} + +// (Output) +// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a +// resource is deleted and recreated with the same name, the binding will be applicable to the +// new resource. Format: +// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` +func (o ParameterPolicyMemberOutput) IamPolicyNamePrincipal() pulumi.StringPtrOutput { + return o.ApplyT(func(v ParameterPolicyMember) *string { return v.IamPolicyNamePrincipal }).(pulumi.StringPtrOutput) +} + +// (Output) +// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. +// If a resource is deleted and recreated with the same name, the binding will not be applicable to the +// new resource. Format: +// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` +func (o ParameterPolicyMemberOutput) IamPolicyUidPrincipal() pulumi.StringPtrOutput { + return o.ApplyT(func(v ParameterPolicyMember) *string { return v.IamPolicyUidPrincipal }).(pulumi.StringPtrOutput) +} + +type ParameterPolicyMemberArrayOutput struct{ *pulumi.OutputState } + +func (ParameterPolicyMemberArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ParameterPolicyMember)(nil)).Elem() +} + +func (o ParameterPolicyMemberArrayOutput) ToParameterPolicyMemberArrayOutput() ParameterPolicyMemberArrayOutput { + return o +} + +func (o ParameterPolicyMemberArrayOutput) ToParameterPolicyMemberArrayOutputWithContext(ctx context.Context) ParameterPolicyMemberArrayOutput { + return o +} + +func (o ParameterPolicyMemberArrayOutput) Index(i pulumi.IntInput) ParameterPolicyMemberOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ParameterPolicyMember { + return vs[0].([]ParameterPolicyMember)[vs[1].(int)] + }).(ParameterPolicyMemberOutput) +} + +type RegionalParameterPolicyMember struct { + // (Output) + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + // deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + IamPolicyNamePrincipal *string `pulumi:"iamPolicyNamePrincipal"` + // (Output) + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + // a resource is deleted and recreated with the same name, the binding will not be applicable to the new + // resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + IamPolicyUidPrincipal *string `pulumi:"iamPolicyUidPrincipal"` +} + +// RegionalParameterPolicyMemberInput is an input type that accepts RegionalParameterPolicyMemberArgs and RegionalParameterPolicyMemberOutput values. +// You can construct a concrete instance of `RegionalParameterPolicyMemberInput` via: +// +// RegionalParameterPolicyMemberArgs{...} +type RegionalParameterPolicyMemberInput interface { + pulumi.Input + + ToRegionalParameterPolicyMemberOutput() RegionalParameterPolicyMemberOutput + ToRegionalParameterPolicyMemberOutputWithContext(context.Context) RegionalParameterPolicyMemberOutput +} + +type RegionalParameterPolicyMemberArgs struct { + // (Output) + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + // deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + IamPolicyNamePrincipal pulumi.StringPtrInput `pulumi:"iamPolicyNamePrincipal"` + // (Output) + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + // a resource is deleted and recreated with the same name, the binding will not be applicable to the new + // resource. Format: + // `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + IamPolicyUidPrincipal pulumi.StringPtrInput `pulumi:"iamPolicyUidPrincipal"` +} + +func (RegionalParameterPolicyMemberArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RegionalParameterPolicyMember)(nil)).Elem() +} + +func (i RegionalParameterPolicyMemberArgs) ToRegionalParameterPolicyMemberOutput() RegionalParameterPolicyMemberOutput { + return i.ToRegionalParameterPolicyMemberOutputWithContext(context.Background()) +} + +func (i RegionalParameterPolicyMemberArgs) ToRegionalParameterPolicyMemberOutputWithContext(ctx context.Context) RegionalParameterPolicyMemberOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterPolicyMemberOutput) +} + +// RegionalParameterPolicyMemberArrayInput is an input type that accepts RegionalParameterPolicyMemberArray and RegionalParameterPolicyMemberArrayOutput values. +// You can construct a concrete instance of `RegionalParameterPolicyMemberArrayInput` via: +// +// RegionalParameterPolicyMemberArray{ RegionalParameterPolicyMemberArgs{...} } +type RegionalParameterPolicyMemberArrayInput interface { + pulumi.Input + + ToRegionalParameterPolicyMemberArrayOutput() RegionalParameterPolicyMemberArrayOutput + ToRegionalParameterPolicyMemberArrayOutputWithContext(context.Context) RegionalParameterPolicyMemberArrayOutput +} + +type RegionalParameterPolicyMemberArray []RegionalParameterPolicyMemberInput + +func (RegionalParameterPolicyMemberArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RegionalParameterPolicyMember)(nil)).Elem() +} + +func (i RegionalParameterPolicyMemberArray) ToRegionalParameterPolicyMemberArrayOutput() RegionalParameterPolicyMemberArrayOutput { + return i.ToRegionalParameterPolicyMemberArrayOutputWithContext(context.Background()) +} + +func (i RegionalParameterPolicyMemberArray) ToRegionalParameterPolicyMemberArrayOutputWithContext(ctx context.Context) RegionalParameterPolicyMemberArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterPolicyMemberArrayOutput) +} + +type RegionalParameterPolicyMemberOutput struct{ *pulumi.OutputState } + +func (RegionalParameterPolicyMemberOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RegionalParameterPolicyMember)(nil)).Elem() +} + +func (o RegionalParameterPolicyMemberOutput) ToRegionalParameterPolicyMemberOutput() RegionalParameterPolicyMemberOutput { + return o +} + +func (o RegionalParameterPolicyMemberOutput) ToRegionalParameterPolicyMemberOutputWithContext(ctx context.Context) RegionalParameterPolicyMemberOutput { + return o +} + +// (Output) +// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is +// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: +// `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` +func (o RegionalParameterPolicyMemberOutput) IamPolicyNamePrincipal() pulumi.StringPtrOutput { + return o.ApplyT(func(v RegionalParameterPolicyMember) *string { return v.IamPolicyNamePrincipal }).(pulumi.StringPtrOutput) +} + +// (Output) +// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If +// a resource is deleted and recreated with the same name, the binding will not be applicable to the new +// resource. Format: +// `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` +func (o RegionalParameterPolicyMemberOutput) IamPolicyUidPrincipal() pulumi.StringPtrOutput { + return o.ApplyT(func(v RegionalParameterPolicyMember) *string { return v.IamPolicyUidPrincipal }).(pulumi.StringPtrOutput) +} + +type RegionalParameterPolicyMemberArrayOutput struct{ *pulumi.OutputState } + +func (RegionalParameterPolicyMemberArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RegionalParameterPolicyMember)(nil)).Elem() +} + +func (o RegionalParameterPolicyMemberArrayOutput) ToRegionalParameterPolicyMemberArrayOutput() RegionalParameterPolicyMemberArrayOutput { + return o +} + +func (o RegionalParameterPolicyMemberArrayOutput) ToRegionalParameterPolicyMemberArrayOutputWithContext(ctx context.Context) RegionalParameterPolicyMemberArrayOutput { + return o +} + +func (o RegionalParameterPolicyMemberArrayOutput) Index(i pulumi.IntInput) RegionalParameterPolicyMemberOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RegionalParameterPolicyMember { + return vs[0].([]RegionalParameterPolicyMember)[vs[1].(int)] + }).(RegionalParameterPolicyMemberOutput) +} + +type GetRegionalParameterPolicyMember struct { + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + // deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + // 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + IamPolicyNamePrincipal string `pulumi:"iamPolicyNamePrincipal"` + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + // a resource is deleted and recreated with the same name, the binding will not be applicable to the new + // resource. Format: + // 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + IamPolicyUidPrincipal string `pulumi:"iamPolicyUidPrincipal"` +} + +// GetRegionalParameterPolicyMemberInput is an input type that accepts GetRegionalParameterPolicyMemberArgs and GetRegionalParameterPolicyMemberOutput values. +// You can construct a concrete instance of `GetRegionalParameterPolicyMemberInput` via: +// +// GetRegionalParameterPolicyMemberArgs{...} +type GetRegionalParameterPolicyMemberInput interface { + pulumi.Input + + ToGetRegionalParameterPolicyMemberOutput() GetRegionalParameterPolicyMemberOutput + ToGetRegionalParameterPolicyMemberOutputWithContext(context.Context) GetRegionalParameterPolicyMemberOutput +} + +type GetRegionalParameterPolicyMemberArgs struct { + // IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + // deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + // 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + IamPolicyNamePrincipal pulumi.StringInput `pulumi:"iamPolicyNamePrincipal"` + // IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + // a resource is deleted and recreated with the same name, the binding will not be applicable to the new + // resource. Format: + // 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + IamPolicyUidPrincipal pulumi.StringInput `pulumi:"iamPolicyUidPrincipal"` +} + +func (GetRegionalParameterPolicyMemberArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetRegionalParameterPolicyMember)(nil)).Elem() +} + +func (i GetRegionalParameterPolicyMemberArgs) ToGetRegionalParameterPolicyMemberOutput() GetRegionalParameterPolicyMemberOutput { + return i.ToGetRegionalParameterPolicyMemberOutputWithContext(context.Background()) +} + +func (i GetRegionalParameterPolicyMemberArgs) ToGetRegionalParameterPolicyMemberOutputWithContext(ctx context.Context) GetRegionalParameterPolicyMemberOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetRegionalParameterPolicyMemberOutput) +} + +// GetRegionalParameterPolicyMemberArrayInput is an input type that accepts GetRegionalParameterPolicyMemberArray and GetRegionalParameterPolicyMemberArrayOutput values. +// You can construct a concrete instance of `GetRegionalParameterPolicyMemberArrayInput` via: +// +// GetRegionalParameterPolicyMemberArray{ GetRegionalParameterPolicyMemberArgs{...} } +type GetRegionalParameterPolicyMemberArrayInput interface { + pulumi.Input + + ToGetRegionalParameterPolicyMemberArrayOutput() GetRegionalParameterPolicyMemberArrayOutput + ToGetRegionalParameterPolicyMemberArrayOutputWithContext(context.Context) GetRegionalParameterPolicyMemberArrayOutput +} + +type GetRegionalParameterPolicyMemberArray []GetRegionalParameterPolicyMemberInput + +func (GetRegionalParameterPolicyMemberArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetRegionalParameterPolicyMember)(nil)).Elem() +} + +func (i GetRegionalParameterPolicyMemberArray) ToGetRegionalParameterPolicyMemberArrayOutput() GetRegionalParameterPolicyMemberArrayOutput { + return i.ToGetRegionalParameterPolicyMemberArrayOutputWithContext(context.Background()) +} + +func (i GetRegionalParameterPolicyMemberArray) ToGetRegionalParameterPolicyMemberArrayOutputWithContext(ctx context.Context) GetRegionalParameterPolicyMemberArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetRegionalParameterPolicyMemberArrayOutput) +} + +type GetRegionalParameterPolicyMemberOutput struct{ *pulumi.OutputState } + +func (GetRegionalParameterPolicyMemberOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetRegionalParameterPolicyMember)(nil)).Elem() +} + +func (o GetRegionalParameterPolicyMemberOutput) ToGetRegionalParameterPolicyMemberOutput() GetRegionalParameterPolicyMemberOutput { + return o +} + +func (o GetRegionalParameterPolicyMemberOutput) ToGetRegionalParameterPolicyMemberOutputWithContext(ctx context.Context) GetRegionalParameterPolicyMemberOutput { + return o +} + +// IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is +// deleted and recreated with the same name, the binding will be applicable to the new resource. Format: +// 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' +func (o GetRegionalParameterPolicyMemberOutput) IamPolicyNamePrincipal() pulumi.StringOutput { + return o.ApplyT(func(v GetRegionalParameterPolicyMember) string { return v.IamPolicyNamePrincipal }).(pulumi.StringOutput) +} + +// IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If +// a resource is deleted and recreated with the same name, the binding will not be applicable to the new +// resource. Format: +// 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' +func (o GetRegionalParameterPolicyMemberOutput) IamPolicyUidPrincipal() pulumi.StringOutput { + return o.ApplyT(func(v GetRegionalParameterPolicyMember) string { return v.IamPolicyUidPrincipal }).(pulumi.StringOutput) +} + +type GetRegionalParameterPolicyMemberArrayOutput struct{ *pulumi.OutputState } + +func (GetRegionalParameterPolicyMemberArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetRegionalParameterPolicyMember)(nil)).Elem() +} + +func (o GetRegionalParameterPolicyMemberArrayOutput) ToGetRegionalParameterPolicyMemberArrayOutput() GetRegionalParameterPolicyMemberArrayOutput { + return o +} + +func (o GetRegionalParameterPolicyMemberArrayOutput) ToGetRegionalParameterPolicyMemberArrayOutputWithContext(ctx context.Context) GetRegionalParameterPolicyMemberArrayOutput { + return o +} + +func (o GetRegionalParameterPolicyMemberArrayOutput) Index(i pulumi.IntInput) GetRegionalParameterPolicyMemberOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetRegionalParameterPolicyMember { + return vs[0].([]GetRegionalParameterPolicyMember)[vs[1].(int)] + }).(GetRegionalParameterPolicyMemberOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ParameterPolicyMemberInput)(nil)).Elem(), ParameterPolicyMemberArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ParameterPolicyMemberArrayInput)(nil)).Elem(), ParameterPolicyMemberArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterPolicyMemberInput)(nil)).Elem(), RegionalParameterPolicyMemberArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterPolicyMemberArrayInput)(nil)).Elem(), RegionalParameterPolicyMemberArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetRegionalParameterPolicyMemberInput)(nil)).Elem(), GetRegionalParameterPolicyMemberArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetRegionalParameterPolicyMemberArrayInput)(nil)).Elem(), GetRegionalParameterPolicyMemberArray{}) + pulumi.RegisterOutputType(ParameterPolicyMemberOutput{}) + pulumi.RegisterOutputType(ParameterPolicyMemberArrayOutput{}) + pulumi.RegisterOutputType(RegionalParameterPolicyMemberOutput{}) + pulumi.RegisterOutputType(RegionalParameterPolicyMemberArrayOutput{}) + pulumi.RegisterOutputType(GetRegionalParameterPolicyMemberOutput{}) + pulumi.RegisterOutputType(GetRegionalParameterPolicyMemberArrayOutput{}) +} diff --git a/sdk/go/gcp/parametermanager/regionalParameter.go b/sdk/go/gcp/parametermanager/regionalParameter.go new file mode 100644 index 0000000000..dd0af46705 --- /dev/null +++ b/sdk/go/gcp/parametermanager/regionalParameter.go @@ -0,0 +1,566 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Regional Parameter Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-basic", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Location: pulumi.String("us-central1"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Regional Parameter With Format +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-with-format", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Location: pulumi.String("us-central1"), +// Format: pulumi.String("JSON"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Regional Parameter With Labels +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-with-labels", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Location: pulumi.String("us-central1"), +// Labels: pulumi.StringMap{ +// "key1": pulumi.String("val1"), +// "key2": pulumi.String("val2"), +// "key3": pulumi.String("val3"), +// "key4": pulumi.String("val4"), +// "key5": pulumi.String("val5"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// RegionalParameter can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` +// +// * `{{project}}/{{location}}/{{parameter_id}}` +// +// * `{{location}}/{{parameter_id}}` +// +// When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} +// ``` +type RegionalParameter struct { + pulumi.CustomResourceState + + // The time at which the regional Parameter was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // The format type of the regional parameter. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrOutput `pulumi:"format"` + // The labels assigned to this regional Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The location of the regional parameter. eg us-central1 + Location pulumi.StringOutput `pulumi:"location"` + // The resource name of the regional Parameter. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + Name pulumi.StringOutput `pulumi:"name"` + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringOutput `pulumi:"parameterId"` + // An object containing a unique resource identity tied to the regional parameter. + // Structure is documented below. + PolicyMembers RegionalParameterPolicyMemberArrayOutput `pulumi:"policyMembers"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // The time at which the regional Parameter was updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewRegionalParameter registers a new resource with the given unique name, arguments, and options. +func NewRegionalParameter(ctx *pulumi.Context, + name string, args *RegionalParameterArgs, opts ...pulumi.ResourceOption) (*RegionalParameter, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.ParameterId == nil { + return nil, errors.New("invalid value for required argument 'ParameterId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource RegionalParameter + err := ctx.RegisterResource("gcp:parametermanager/regionalParameter:RegionalParameter", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRegionalParameter gets an existing RegionalParameter resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRegionalParameter(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RegionalParameterState, opts ...pulumi.ResourceOption) (*RegionalParameter, error) { + var resource RegionalParameter + err := ctx.ReadResource("gcp:parametermanager/regionalParameter:RegionalParameter", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RegionalParameter resources. +type regionalParameterState struct { + // The time at which the regional Parameter was created. + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // The format type of the regional parameter. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format *string `pulumi:"format"` + // The labels assigned to this regional Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location of the regional parameter. eg us-central1 + Location *string `pulumi:"location"` + // The resource name of the regional Parameter. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + Name *string `pulumi:"name"` + // This must be unique within the project. + // + // *** + ParameterId *string `pulumi:"parameterId"` + // An object containing a unique resource identity tied to the regional parameter. + // Structure is documented below. + PolicyMembers []RegionalParameterPolicyMember `pulumi:"policyMembers"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // The time at which the regional Parameter was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type RegionalParameterState struct { + // The time at which the regional Parameter was created. + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // The format type of the regional parameter. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrInput + // The labels assigned to this regional Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location of the regional parameter. eg us-central1 + Location pulumi.StringPtrInput + // The resource name of the regional Parameter. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + Name pulumi.StringPtrInput + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringPtrInput + // An object containing a unique resource identity tied to the regional parameter. + // Structure is documented below. + PolicyMembers RegionalParameterPolicyMemberArrayInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // The time at which the regional Parameter was updated. + UpdateTime pulumi.StringPtrInput +} + +func (RegionalParameterState) ElementType() reflect.Type { + return reflect.TypeOf((*regionalParameterState)(nil)).Elem() +} + +type regionalParameterArgs struct { + // The format type of the regional parameter. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format *string `pulumi:"format"` + // The labels assigned to this regional Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location of the regional parameter. eg us-central1 + Location string `pulumi:"location"` + // This must be unique within the project. + // + // *** + ParameterId string `pulumi:"parameterId"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a RegionalParameter resource. +type RegionalParameterArgs struct { + // The format type of the regional parameter. + // Default value is `UNFORMATTED`. + // Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + Format pulumi.StringPtrInput + // The labels assigned to this regional Parameter. + // Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + // Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + // and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + // No more than 64 labels can be assigned to a given resource. + // An object containing a list of "key": value pairs. Example: + // { "name": "wrench", "mass": "1.3kg", "count": "3" }. + // + // **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + // Please refer to the field `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location of the regional parameter. eg us-central1 + Location pulumi.StringInput + // This must be unique within the project. + // + // *** + ParameterId pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (RegionalParameterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*regionalParameterArgs)(nil)).Elem() +} + +type RegionalParameterInput interface { + pulumi.Input + + ToRegionalParameterOutput() RegionalParameterOutput + ToRegionalParameterOutputWithContext(ctx context.Context) RegionalParameterOutput +} + +func (*RegionalParameter) ElementType() reflect.Type { + return reflect.TypeOf((**RegionalParameter)(nil)).Elem() +} + +func (i *RegionalParameter) ToRegionalParameterOutput() RegionalParameterOutput { + return i.ToRegionalParameterOutputWithContext(context.Background()) +} + +func (i *RegionalParameter) ToRegionalParameterOutputWithContext(ctx context.Context) RegionalParameterOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterOutput) +} + +// RegionalParameterArrayInput is an input type that accepts RegionalParameterArray and RegionalParameterArrayOutput values. +// You can construct a concrete instance of `RegionalParameterArrayInput` via: +// +// RegionalParameterArray{ RegionalParameterArgs{...} } +type RegionalParameterArrayInput interface { + pulumi.Input + + ToRegionalParameterArrayOutput() RegionalParameterArrayOutput + ToRegionalParameterArrayOutputWithContext(context.Context) RegionalParameterArrayOutput +} + +type RegionalParameterArray []RegionalParameterInput + +func (RegionalParameterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RegionalParameter)(nil)).Elem() +} + +func (i RegionalParameterArray) ToRegionalParameterArrayOutput() RegionalParameterArrayOutput { + return i.ToRegionalParameterArrayOutputWithContext(context.Background()) +} + +func (i RegionalParameterArray) ToRegionalParameterArrayOutputWithContext(ctx context.Context) RegionalParameterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterArrayOutput) +} + +// RegionalParameterMapInput is an input type that accepts RegionalParameterMap and RegionalParameterMapOutput values. +// You can construct a concrete instance of `RegionalParameterMapInput` via: +// +// RegionalParameterMap{ "key": RegionalParameterArgs{...} } +type RegionalParameterMapInput interface { + pulumi.Input + + ToRegionalParameterMapOutput() RegionalParameterMapOutput + ToRegionalParameterMapOutputWithContext(context.Context) RegionalParameterMapOutput +} + +type RegionalParameterMap map[string]RegionalParameterInput + +func (RegionalParameterMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RegionalParameter)(nil)).Elem() +} + +func (i RegionalParameterMap) ToRegionalParameterMapOutput() RegionalParameterMapOutput { + return i.ToRegionalParameterMapOutputWithContext(context.Background()) +} + +func (i RegionalParameterMap) ToRegionalParameterMapOutputWithContext(ctx context.Context) RegionalParameterMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterMapOutput) +} + +type RegionalParameterOutput struct{ *pulumi.OutputState } + +func (RegionalParameterOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RegionalParameter)(nil)).Elem() +} + +func (o RegionalParameterOutput) ToRegionalParameterOutput() RegionalParameterOutput { + return o +} + +func (o RegionalParameterOutput) ToRegionalParameterOutputWithContext(ctx context.Context) RegionalParameterOutput { + return o +} + +// The time at which the regional Parameter was created. +func (o RegionalParameterOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o RegionalParameterOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// The format type of the regional parameter. +// Default value is `UNFORMATTED`. +// Possible values are: `UNFORMATTED`, `YAML`, `JSON`. +func (o RegionalParameterOutput) Format() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringPtrOutput { return v.Format }).(pulumi.StringPtrOutput) +} + +// The labels assigned to this regional Parameter. +// Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, +// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} +// Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, +// and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} +// No more than 64 labels can be assigned to a given resource. +// An object containing a list of "key": value pairs. Example: +// { "name": "wrench", "mass": "1.3kg", "count": "3" }. +// +// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. +// Please refer to the field `effectiveLabels` for all of the labels present on the resource. +func (o RegionalParameterOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location of the regional parameter. eg us-central1 +func (o RegionalParameterOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The resource name of the regional Parameter. Format: +// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` +func (o RegionalParameterOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// This must be unique within the project. +// +// *** +func (o RegionalParameterOutput) ParameterId() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.ParameterId }).(pulumi.StringOutput) +} + +// An object containing a unique resource identity tied to the regional parameter. +// Structure is documented below. +func (o RegionalParameterOutput) PolicyMembers() RegionalParameterPolicyMemberArrayOutput { + return o.ApplyT(func(v *RegionalParameter) RegionalParameterPolicyMemberArrayOutput { return v.PolicyMembers }).(RegionalParameterPolicyMemberArrayOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o RegionalParameterOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o RegionalParameterOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// The time at which the regional Parameter was updated. +func (o RegionalParameterOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameter) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type RegionalParameterArrayOutput struct{ *pulumi.OutputState } + +func (RegionalParameterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RegionalParameter)(nil)).Elem() +} + +func (o RegionalParameterArrayOutput) ToRegionalParameterArrayOutput() RegionalParameterArrayOutput { + return o +} + +func (o RegionalParameterArrayOutput) ToRegionalParameterArrayOutputWithContext(ctx context.Context) RegionalParameterArrayOutput { + return o +} + +func (o RegionalParameterArrayOutput) Index(i pulumi.IntInput) RegionalParameterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RegionalParameter { + return vs[0].([]*RegionalParameter)[vs[1].(int)] + }).(RegionalParameterOutput) +} + +type RegionalParameterMapOutput struct{ *pulumi.OutputState } + +func (RegionalParameterMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RegionalParameter)(nil)).Elem() +} + +func (o RegionalParameterMapOutput) ToRegionalParameterMapOutput() RegionalParameterMapOutput { + return o +} + +func (o RegionalParameterMapOutput) ToRegionalParameterMapOutputWithContext(ctx context.Context) RegionalParameterMapOutput { + return o +} + +func (o RegionalParameterMapOutput) MapIndex(k pulumi.StringInput) RegionalParameterOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RegionalParameter { + return vs[0].(map[string]*RegionalParameter)[vs[1].(string)] + }).(RegionalParameterOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterInput)(nil)).Elem(), &RegionalParameter{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterArrayInput)(nil)).Elem(), RegionalParameterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterMapInput)(nil)).Elem(), RegionalParameterMap{}) + pulumi.RegisterOutputType(RegionalParameterOutput{}) + pulumi.RegisterOutputType(RegionalParameterArrayOutput{}) + pulumi.RegisterOutputType(RegionalParameterMapOutput{}) +} diff --git a/sdk/go/gcp/parametermanager/regionalParameterVersion.go b/sdk/go/gcp/parametermanager/regionalParameterVersion.go new file mode 100644 index 0000000000..e8d4b8bd3f --- /dev/null +++ b/sdk/go/gcp/parametermanager/regionalParameterVersion.go @@ -0,0 +1,474 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package parametermanager + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Regional Parameter Version Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-basic", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Location: pulumi.String("us-central1"), +// }) +// if err != nil { +// return err +// } +// _, err = parametermanager.NewRegionalParameterVersion(ctx, "regional-parameter-version-basic", ¶metermanager.RegionalParameterVersionArgs{ +// Parameter: regional_parameter_basic.ID(), +// ParameterVersionId: pulumi.String("regional_parameter_version"), +// ParameterData: pulumi.String("regional-parameter-version-data"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Regional Parameter Version With Json Format +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi-std/sdk/go/std" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-basic", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Format: pulumi.String("JSON"), +// Location: pulumi.String("us-central1"), +// }) +// if err != nil { +// return err +// } +// invokeFile, err := std.File(ctx, &std.FileArgs{ +// Input: "parameter_data_json_format.yaml", +// }, nil) +// if err != nil { +// return err +// } +// _, err = parametermanager.NewRegionalParameterVersion(ctx, "regional-parameter-version-with-json-format", ¶metermanager.RegionalParameterVersionArgs{ +// Parameter: regional_parameter_basic.ID(), +// ParameterVersionId: pulumi.String("regional_parameter_version"), +// ParameterData: pulumi.String(invokeFile.Result), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Regional Parameter Version With Yaml Format +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parametermanager" +// "github.com/pulumi/pulumi-std/sdk/go/std" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := parametermanager.NewRegionalParameter(ctx, "regional-parameter-basic", ¶metermanager.RegionalParameterArgs{ +// ParameterId: pulumi.String("regional_parameter"), +// Format: pulumi.String("YAML"), +// Location: pulumi.String("us-central1"), +// }) +// if err != nil { +// return err +// } +// invokeFile, err := std.File(ctx, &std.FileArgs{ +// Input: "parameter_data_yaml_format.yaml", +// }, nil) +// if err != nil { +// return err +// } +// _, err = parametermanager.NewRegionalParameterVersion(ctx, "regional-parameter-version-with-yaml-format", ¶metermanager.RegionalParameterVersionArgs{ +// Parameter: regional_parameter_basic.ID(), +// ParameterVersionId: pulumi.String("regional_parameter_version"), +// ParameterData: pulumi.String(invokeFile.Result), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// RegionalParameterVersion can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` +// +// When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} +// ``` +type RegionalParameterVersion struct { + pulumi.CustomResourceState + + // The time at which the Regional Parameter Version was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + Disabled pulumi.BoolPtrOutput `pulumi:"disabled"` + // Location of Parameter Manager Regional parameter resource. + Location pulumi.StringOutput `pulumi:"location"` + // The resource name of the Regional Parameter Version. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + Name pulumi.StringOutput `pulumi:"name"` + // Parameter Manager Regional Parameter resource. + Parameter pulumi.StringOutput `pulumi:"parameter"` + // The Regional Parameter data. + // **Note**: This property is sensitive and will not be displayed in the plan. + ParameterData pulumi.StringOutput `pulumi:"parameterData"` + // Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + // + // *** + ParameterVersionId pulumi.StringOutput `pulumi:"parameterVersionId"` + // The time at which the Regional Parameter Version was updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewRegionalParameterVersion registers a new resource with the given unique name, arguments, and options. +func NewRegionalParameterVersion(ctx *pulumi.Context, + name string, args *RegionalParameterVersionArgs, opts ...pulumi.ResourceOption) (*RegionalParameterVersion, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Parameter == nil { + return nil, errors.New("invalid value for required argument 'Parameter'") + } + if args.ParameterData == nil { + return nil, errors.New("invalid value for required argument 'ParameterData'") + } + if args.ParameterVersionId == nil { + return nil, errors.New("invalid value for required argument 'ParameterVersionId'") + } + if args.ParameterData != nil { + args.ParameterData = pulumi.ToSecret(args.ParameterData).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "parameterData", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource RegionalParameterVersion + err := ctx.RegisterResource("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRegionalParameterVersion gets an existing RegionalParameterVersion resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRegionalParameterVersion(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RegionalParameterVersionState, opts ...pulumi.ResourceOption) (*RegionalParameterVersion, error) { + var resource RegionalParameterVersion + err := ctx.ReadResource("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RegionalParameterVersion resources. +type regionalParameterVersionState struct { + // The time at which the Regional Parameter Version was created. + CreateTime *string `pulumi:"createTime"` + // The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + Disabled *bool `pulumi:"disabled"` + // Location of Parameter Manager Regional parameter resource. + Location *string `pulumi:"location"` + // The resource name of the Regional Parameter Version. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + Name *string `pulumi:"name"` + // Parameter Manager Regional Parameter resource. + Parameter *string `pulumi:"parameter"` + // The Regional Parameter data. + // **Note**: This property is sensitive and will not be displayed in the plan. + ParameterData *string `pulumi:"parameterData"` + // Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + // + // *** + ParameterVersionId *string `pulumi:"parameterVersionId"` + // The time at which the Regional Parameter Version was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type RegionalParameterVersionState struct { + // The time at which the Regional Parameter Version was created. + CreateTime pulumi.StringPtrInput + // The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + Disabled pulumi.BoolPtrInput + // Location of Parameter Manager Regional parameter resource. + Location pulumi.StringPtrInput + // The resource name of the Regional Parameter Version. Format: + // `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + Name pulumi.StringPtrInput + // Parameter Manager Regional Parameter resource. + Parameter pulumi.StringPtrInput + // The Regional Parameter data. + // **Note**: This property is sensitive and will not be displayed in the plan. + ParameterData pulumi.StringPtrInput + // Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + // + // *** + ParameterVersionId pulumi.StringPtrInput + // The time at which the Regional Parameter Version was updated. + UpdateTime pulumi.StringPtrInput +} + +func (RegionalParameterVersionState) ElementType() reflect.Type { + return reflect.TypeOf((*regionalParameterVersionState)(nil)).Elem() +} + +type regionalParameterVersionArgs struct { + // The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + Disabled *bool `pulumi:"disabled"` + // Parameter Manager Regional Parameter resource. + Parameter string `pulumi:"parameter"` + // The Regional Parameter data. + // **Note**: This property is sensitive and will not be displayed in the plan. + ParameterData string `pulumi:"parameterData"` + // Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + // + // *** + ParameterVersionId string `pulumi:"parameterVersionId"` +} + +// The set of arguments for constructing a RegionalParameterVersion resource. +type RegionalParameterVersionArgs struct { + // The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + Disabled pulumi.BoolPtrInput + // Parameter Manager Regional Parameter resource. + Parameter pulumi.StringInput + // The Regional Parameter data. + // **Note**: This property is sensitive and will not be displayed in the plan. + ParameterData pulumi.StringInput + // Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + // + // *** + ParameterVersionId pulumi.StringInput +} + +func (RegionalParameterVersionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*regionalParameterVersionArgs)(nil)).Elem() +} + +type RegionalParameterVersionInput interface { + pulumi.Input + + ToRegionalParameterVersionOutput() RegionalParameterVersionOutput + ToRegionalParameterVersionOutputWithContext(ctx context.Context) RegionalParameterVersionOutput +} + +func (*RegionalParameterVersion) ElementType() reflect.Type { + return reflect.TypeOf((**RegionalParameterVersion)(nil)).Elem() +} + +func (i *RegionalParameterVersion) ToRegionalParameterVersionOutput() RegionalParameterVersionOutput { + return i.ToRegionalParameterVersionOutputWithContext(context.Background()) +} + +func (i *RegionalParameterVersion) ToRegionalParameterVersionOutputWithContext(ctx context.Context) RegionalParameterVersionOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterVersionOutput) +} + +// RegionalParameterVersionArrayInput is an input type that accepts RegionalParameterVersionArray and RegionalParameterVersionArrayOutput values. +// You can construct a concrete instance of `RegionalParameterVersionArrayInput` via: +// +// RegionalParameterVersionArray{ RegionalParameterVersionArgs{...} } +type RegionalParameterVersionArrayInput interface { + pulumi.Input + + ToRegionalParameterVersionArrayOutput() RegionalParameterVersionArrayOutput + ToRegionalParameterVersionArrayOutputWithContext(context.Context) RegionalParameterVersionArrayOutput +} + +type RegionalParameterVersionArray []RegionalParameterVersionInput + +func (RegionalParameterVersionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RegionalParameterVersion)(nil)).Elem() +} + +func (i RegionalParameterVersionArray) ToRegionalParameterVersionArrayOutput() RegionalParameterVersionArrayOutput { + return i.ToRegionalParameterVersionArrayOutputWithContext(context.Background()) +} + +func (i RegionalParameterVersionArray) ToRegionalParameterVersionArrayOutputWithContext(ctx context.Context) RegionalParameterVersionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterVersionArrayOutput) +} + +// RegionalParameterVersionMapInput is an input type that accepts RegionalParameterVersionMap and RegionalParameterVersionMapOutput values. +// You can construct a concrete instance of `RegionalParameterVersionMapInput` via: +// +// RegionalParameterVersionMap{ "key": RegionalParameterVersionArgs{...} } +type RegionalParameterVersionMapInput interface { + pulumi.Input + + ToRegionalParameterVersionMapOutput() RegionalParameterVersionMapOutput + ToRegionalParameterVersionMapOutputWithContext(context.Context) RegionalParameterVersionMapOutput +} + +type RegionalParameterVersionMap map[string]RegionalParameterVersionInput + +func (RegionalParameterVersionMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RegionalParameterVersion)(nil)).Elem() +} + +func (i RegionalParameterVersionMap) ToRegionalParameterVersionMapOutput() RegionalParameterVersionMapOutput { + return i.ToRegionalParameterVersionMapOutputWithContext(context.Background()) +} + +func (i RegionalParameterVersionMap) ToRegionalParameterVersionMapOutputWithContext(ctx context.Context) RegionalParameterVersionMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionalParameterVersionMapOutput) +} + +type RegionalParameterVersionOutput struct{ *pulumi.OutputState } + +func (RegionalParameterVersionOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RegionalParameterVersion)(nil)).Elem() +} + +func (o RegionalParameterVersionOutput) ToRegionalParameterVersionOutput() RegionalParameterVersionOutput { + return o +} + +func (o RegionalParameterVersionOutput) ToRegionalParameterVersionOutputWithContext(ctx context.Context) RegionalParameterVersionOutput { + return o +} + +// The time at which the Regional Parameter Version was created. +func (o RegionalParameterVersionOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. +func (o RegionalParameterVersionOutput) Disabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.BoolPtrOutput { return v.Disabled }).(pulumi.BoolPtrOutput) +} + +// Location of Parameter Manager Regional parameter resource. +func (o RegionalParameterVersionOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The resource name of the Regional Parameter Version. Format: +// `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` +func (o RegionalParameterVersionOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Parameter Manager Regional Parameter resource. +func (o RegionalParameterVersionOutput) Parameter() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.Parameter }).(pulumi.StringOutput) +} + +// The Regional Parameter data. +// **Note**: This property is sensitive and will not be displayed in the plan. +func (o RegionalParameterVersionOutput) ParameterData() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.ParameterData }).(pulumi.StringOutput) +} + +// Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. +// +// *** +func (o RegionalParameterVersionOutput) ParameterVersionId() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.ParameterVersionId }).(pulumi.StringOutput) +} + +// The time at which the Regional Parameter Version was updated. +func (o RegionalParameterVersionOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RegionalParameterVersion) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type RegionalParameterVersionArrayOutput struct{ *pulumi.OutputState } + +func (RegionalParameterVersionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RegionalParameterVersion)(nil)).Elem() +} + +func (o RegionalParameterVersionArrayOutput) ToRegionalParameterVersionArrayOutput() RegionalParameterVersionArrayOutput { + return o +} + +func (o RegionalParameterVersionArrayOutput) ToRegionalParameterVersionArrayOutputWithContext(ctx context.Context) RegionalParameterVersionArrayOutput { + return o +} + +func (o RegionalParameterVersionArrayOutput) Index(i pulumi.IntInput) RegionalParameterVersionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RegionalParameterVersion { + return vs[0].([]*RegionalParameterVersion)[vs[1].(int)] + }).(RegionalParameterVersionOutput) +} + +type RegionalParameterVersionMapOutput struct{ *pulumi.OutputState } + +func (RegionalParameterVersionMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RegionalParameterVersion)(nil)).Elem() +} + +func (o RegionalParameterVersionMapOutput) ToRegionalParameterVersionMapOutput() RegionalParameterVersionMapOutput { + return o +} + +func (o RegionalParameterVersionMapOutput) ToRegionalParameterVersionMapOutputWithContext(ctx context.Context) RegionalParameterVersionMapOutput { + return o +} + +func (o RegionalParameterVersionMapOutput) MapIndex(k pulumi.StringInput) RegionalParameterVersionOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RegionalParameterVersion { + return vs[0].(map[string]*RegionalParameterVersion)[vs[1].(string)] + }).(RegionalParameterVersionOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterVersionInput)(nil)).Elem(), &RegionalParameterVersion{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterVersionArrayInput)(nil)).Elem(), RegionalParameterVersionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionalParameterVersionMapInput)(nil)).Elem(), RegionalParameterVersionMap{}) + pulumi.RegisterOutputType(RegionalParameterVersionOutput{}) + pulumi.RegisterOutputType(RegionalParameterVersionArrayOutput{}) + pulumi.RegisterOutputType(RegionalParameterVersionMapOutput{}) +} diff --git a/sdk/go/gcp/provider.go b/sdk/go/gcp/provider.go index 9913f9e0f5..72ba63cab0 100644 --- a/sdk/go/gcp/provider.go +++ b/sdk/go/gcp/provider.go @@ -63,6 +63,7 @@ type Provider struct { ClouddeployCustomEndpoint pulumi.StringPtrOutput `pulumi:"clouddeployCustomEndpoint"` ClouddomainsCustomEndpoint pulumi.StringPtrOutput `pulumi:"clouddomainsCustomEndpoint"` Cloudfunctions2CustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudfunctions2CustomEndpoint"` + ColabCustomEndpoint pulumi.StringPtrOutput `pulumi:"colabCustomEndpoint"` ComposerCustomEndpoint pulumi.StringPtrOutput `pulumi:"composerCustomEndpoint"` ComputeCustomEndpoint pulumi.StringPtrOutput `pulumi:"computeCustomEndpoint"` ContainerAnalysisCustomEndpoint pulumi.StringPtrOutput `pulumi:"containerAnalysisCustomEndpoint"` @@ -144,6 +145,8 @@ type Provider struct { OsConfigCustomEndpoint pulumi.StringPtrOutput `pulumi:"osConfigCustomEndpoint"` OsLoginCustomEndpoint pulumi.StringPtrOutput `pulumi:"osLoginCustomEndpoint"` ParallelstoreCustomEndpoint pulumi.StringPtrOutput `pulumi:"parallelstoreCustomEndpoint"` + ParameterManagerCustomEndpoint pulumi.StringPtrOutput `pulumi:"parameterManagerCustomEndpoint"` + ParameterManagerRegionalCustomEndpoint pulumi.StringPtrOutput `pulumi:"parameterManagerRegionalCustomEndpoint"` PrivatecaCustomEndpoint pulumi.StringPtrOutput `pulumi:"privatecaCustomEndpoint"` PrivilegedAccessManagerCustomEndpoint pulumi.StringPtrOutput `pulumi:"privilegedAccessManagerCustomEndpoint"` Project pulumi.StringPtrOutput `pulumi:"project"` @@ -280,6 +283,7 @@ type providerArgs struct { ClouddeployCustomEndpoint *string `pulumi:"clouddeployCustomEndpoint"` ClouddomainsCustomEndpoint *string `pulumi:"clouddomainsCustomEndpoint"` Cloudfunctions2CustomEndpoint *string `pulumi:"cloudfunctions2CustomEndpoint"` + ColabCustomEndpoint *string `pulumi:"colabCustomEndpoint"` ComposerCustomEndpoint *string `pulumi:"composerCustomEndpoint"` ComputeCustomEndpoint *string `pulumi:"computeCustomEndpoint"` ContainerAnalysisCustomEndpoint *string `pulumi:"containerAnalysisCustomEndpoint"` @@ -364,6 +368,8 @@ type providerArgs struct { OsConfigCustomEndpoint *string `pulumi:"osConfigCustomEndpoint"` OsLoginCustomEndpoint *string `pulumi:"osLoginCustomEndpoint"` ParallelstoreCustomEndpoint *string `pulumi:"parallelstoreCustomEndpoint"` + ParameterManagerCustomEndpoint *string `pulumi:"parameterManagerCustomEndpoint"` + ParameterManagerRegionalCustomEndpoint *string `pulumi:"parameterManagerRegionalCustomEndpoint"` PrivatecaCustomEndpoint *string `pulumi:"privatecaCustomEndpoint"` PrivilegedAccessManagerCustomEndpoint *string `pulumi:"privilegedAccessManagerCustomEndpoint"` Project *string `pulumi:"project"` @@ -465,6 +471,7 @@ type ProviderArgs struct { ClouddeployCustomEndpoint pulumi.StringPtrInput ClouddomainsCustomEndpoint pulumi.StringPtrInput Cloudfunctions2CustomEndpoint pulumi.StringPtrInput + ColabCustomEndpoint pulumi.StringPtrInput ComposerCustomEndpoint pulumi.StringPtrInput ComputeCustomEndpoint pulumi.StringPtrInput ContainerAnalysisCustomEndpoint pulumi.StringPtrInput @@ -549,6 +556,8 @@ type ProviderArgs struct { OsConfigCustomEndpoint pulumi.StringPtrInput OsLoginCustomEndpoint pulumi.StringPtrInput ParallelstoreCustomEndpoint pulumi.StringPtrInput + ParameterManagerCustomEndpoint pulumi.StringPtrInput + ParameterManagerRegionalCustomEndpoint pulumi.StringPtrInput PrivatecaCustomEndpoint pulumi.StringPtrInput PrivilegedAccessManagerCustomEndpoint pulumi.StringPtrInput Project pulumi.StringPtrInput @@ -818,6 +827,10 @@ func (o ProviderOutput) Cloudfunctions2CustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Cloudfunctions2CustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) ColabCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ColabCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) ComposerCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ComposerCustomEndpoint }).(pulumi.StringPtrOutput) } @@ -1142,6 +1155,14 @@ func (o ProviderOutput) ParallelstoreCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ParallelstoreCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) ParameterManagerCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ParameterManagerCustomEndpoint }).(pulumi.StringPtrOutput) +} + +func (o ProviderOutput) ParameterManagerRegionalCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ParameterManagerRegionalCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) PrivatecaCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.PrivatecaCustomEndpoint }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/pubsub/subscription.go b/sdk/go/gcp/pubsub/subscription.go index 6a435ffd60..bb275373cf 100644 --- a/sdk/go/gcp/pubsub/subscription.go +++ b/sdk/go/gcp/pubsub/subscription.go @@ -496,7 +496,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_69391"), +// FilenameSuffix: pulumi.String("-_8270"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), @@ -564,7 +564,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_8270"), +// FilenameSuffix: pulumi.String("-_41150"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), @@ -642,7 +642,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_41150"), +// FilenameSuffix: pulumi.String("-_89313"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), diff --git a/sdk/go/gcp/sql/databaseInstance.go b/sdk/go/gcp/sql/databaseInstance.go index 8c7cee1200..9fa05c9f91 100644 --- a/sdk/go/gcp/sql/databaseInstance.go +++ b/sdk/go/gcp/sql/databaseInstance.go @@ -267,9 +267,9 @@ import ( // // ``` // -// ## Switchover (SQL Server Only) +// ## Switchover // -// Users can perform a switchover on any direct `cascadable` replica by following the steps below. +// Users can perform a switchover on a replica by following the steps below. // // ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. // @@ -277,22 +277,27 @@ import ( // // ### Steps to Invoke Switchover // -// Create a `cascadable` replica in a different region from the primary (`cascadableReplica` is set to true in `replicaConfiguration`) +// MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. +// +// SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadableReplica` is set to true in `replicaConfiguration`) // // #### Invoking switchover in the replica resource: // 1. Change instanceType from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` // 2. Remove `masterInstanceName` -// 3. Remove `replicaConfiguration` +// 3. (SQL Server) Remove `replicaConfiguration` // 4. Add current primary's name to the replica's `replicaNames` list +// 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. +// 6. (MySQL/PostgreSQL) Adjust `backupConfiguration`. See Switchover Guide for details. // // #### Updating the primary resource: // 1. Change `instanceType` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` // 2. Set `masterInstanceName` to the original replica (which will be primary after switchover) -// 3. Set `replicaConfiguration` and set `cascadableReplica` to `true` +// 3. (SQL Server) Set `replicaConfiguration` and set `cascadableReplica` to `true` // 4. Remove original replica from `replicaNames` +// - **NOTE**: Do **not** delete the replicaNames field, even if it has no replicas remaining. Set replicaNames = [ ] to indicate it having no replicas. // -// > **NOTE**: Do **not** delete the replicaNames field, even if it has no replicas remaining. Set replicaNames = [ ] to indicate it having no replicas. -// +// 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. +// 6. (MySQL/PostgreSQL) Adjust `backupConfiguration`. See Switchover Guide for details. // #### Plan and verify that: // - `pulumi preview` outputs **"0 to add, 0 to destroy"** // - `pulumi preview` does not say **"must be replaced"** for any resource @@ -400,6 +405,9 @@ type DatabaseInstance struct { ReplicaConfiguration DatabaseInstanceReplicaConfigurationOutput `pulumi:"replicaConfiguration"` // List of replica names. Can be updated. ReplicaNames pulumi.StringArrayOutput `pulumi:"replicaNames"` + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + // after both the primary and replica are created. + ReplicationCluster DatabaseInstanceReplicationClusterOutput `pulumi:"replicationCluster"` // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -531,6 +539,9 @@ type databaseInstanceState struct { ReplicaConfiguration *DatabaseInstanceReplicaConfiguration `pulumi:"replicaConfiguration"` // List of replica names. Can be updated. ReplicaNames []string `pulumi:"replicaNames"` + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + // after both the primary and replica are created. + ReplicationCluster *DatabaseInstanceReplicationCluster `pulumi:"replicationCluster"` // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -618,6 +629,9 @@ type DatabaseInstanceState struct { ReplicaConfiguration DatabaseInstanceReplicaConfigurationPtrInput // List of replica names. Can be updated. ReplicaNames pulumi.StringArrayInput + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + // after both the primary and replica are created. + ReplicationCluster DatabaseInstanceReplicationClusterPtrInput // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -693,6 +707,9 @@ type databaseInstanceArgs struct { ReplicaConfiguration *DatabaseInstanceReplicaConfiguration `pulumi:"replicaConfiguration"` // List of replica names. Can be updated. ReplicaNames []string `pulumi:"replicaNames"` + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + // after both the primary and replica are created. + ReplicationCluster *DatabaseInstanceReplicationCluster `pulumi:"replicationCluster"` // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -759,6 +776,9 @@ type DatabaseInstanceArgs struct { ReplicaConfiguration DatabaseInstanceReplicaConfigurationPtrInput // List of replica names. Can be updated. ReplicaNames pulumi.StringArrayInput + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + // after both the primary and replica are created. + ReplicationCluster DatabaseInstanceReplicationClusterPtrInput // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -986,6 +1006,12 @@ func (o DatabaseInstanceOutput) ReplicaNames() pulumi.StringArrayOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringArrayOutput { return v.ReplicaNames }).(pulumi.StringArrayOutput) } +// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only +// after both the primary and replica are created. +func (o DatabaseInstanceOutput) ReplicationCluster() DatabaseInstanceReplicationClusterOutput { + return o.ApplyT(func(v *DatabaseInstance) DatabaseInstanceReplicationClusterOutput { return v.ReplicationCluster }).(DatabaseInstanceReplicationClusterOutput) +} + // The context needed to restore the database to a backup run. This field will // cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. // **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this diff --git a/sdk/go/gcp/sql/getDatabaseInstance.go b/sdk/go/gcp/sql/getDatabaseInstance.go index 1e6d710810..1568dead47 100644 --- a/sdk/go/gcp/sql/getDatabaseInstance.go +++ b/sdk/go/gcp/sql/getDatabaseInstance.go @@ -80,6 +80,7 @@ type LookupDatabaseInstanceResult struct { Region string `pulumi:"region"` ReplicaConfigurations []GetDatabaseInstanceReplicaConfiguration `pulumi:"replicaConfigurations"` ReplicaNames []string `pulumi:"replicaNames"` + ReplicationClusters []GetDatabaseInstanceReplicationCluster `pulumi:"replicationClusters"` RestoreBackupContexts []GetDatabaseInstanceRestoreBackupContext `pulumi:"restoreBackupContexts"` RootPassword string `pulumi:"rootPassword"` SelfLink string `pulumi:"selfLink"` @@ -211,6 +212,12 @@ func (o LookupDatabaseInstanceResultOutput) ReplicaNames() pulumi.StringArrayOut return o.ApplyT(func(v LookupDatabaseInstanceResult) []string { return v.ReplicaNames }).(pulumi.StringArrayOutput) } +func (o LookupDatabaseInstanceResultOutput) ReplicationClusters() GetDatabaseInstanceReplicationClusterArrayOutput { + return o.ApplyT(func(v LookupDatabaseInstanceResult) []GetDatabaseInstanceReplicationCluster { + return v.ReplicationClusters + }).(GetDatabaseInstanceReplicationClusterArrayOutput) +} + func (o LookupDatabaseInstanceResultOutput) RestoreBackupContexts() GetDatabaseInstanceRestoreBackupContextArrayOutput { return o.ApplyT(func(v LookupDatabaseInstanceResult) []GetDatabaseInstanceRestoreBackupContext { return v.RestoreBackupContexts diff --git a/sdk/go/gcp/sql/pulumiTypes.go b/sdk/go/gcp/sql/pulumiTypes.go index e2299fd4aa..1ae0365b17 100644 --- a/sdk/go/gcp/sql/pulumiTypes.go +++ b/sdk/go/gcp/sql/pulumiTypes.go @@ -754,6 +754,162 @@ func (o DatabaseInstanceReplicaConfigurationPtrOutput) VerifyServerCertificate() }).(pulumi.BoolPtrOutput) } +type DatabaseInstanceReplicationCluster struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica *bool `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName *string `pulumi:"failoverDrReplicaName"` +} + +// DatabaseInstanceReplicationClusterInput is an input type that accepts DatabaseInstanceReplicationClusterArgs and DatabaseInstanceReplicationClusterOutput values. +// You can construct a concrete instance of `DatabaseInstanceReplicationClusterInput` via: +// +// DatabaseInstanceReplicationClusterArgs{...} +type DatabaseInstanceReplicationClusterInput interface { + pulumi.Input + + ToDatabaseInstanceReplicationClusterOutput() DatabaseInstanceReplicationClusterOutput + ToDatabaseInstanceReplicationClusterOutputWithContext(context.Context) DatabaseInstanceReplicationClusterOutput +} + +type DatabaseInstanceReplicationClusterArgs struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica pulumi.BoolPtrInput `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName pulumi.StringPtrInput `pulumi:"failoverDrReplicaName"` +} + +func (DatabaseInstanceReplicationClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*DatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (i DatabaseInstanceReplicationClusterArgs) ToDatabaseInstanceReplicationClusterOutput() DatabaseInstanceReplicationClusterOutput { + return i.ToDatabaseInstanceReplicationClusterOutputWithContext(context.Background()) +} + +func (i DatabaseInstanceReplicationClusterArgs) ToDatabaseInstanceReplicationClusterOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(DatabaseInstanceReplicationClusterOutput) +} + +func (i DatabaseInstanceReplicationClusterArgs) ToDatabaseInstanceReplicationClusterPtrOutput() DatabaseInstanceReplicationClusterPtrOutput { + return i.ToDatabaseInstanceReplicationClusterPtrOutputWithContext(context.Background()) +} + +func (i DatabaseInstanceReplicationClusterArgs) ToDatabaseInstanceReplicationClusterPtrOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DatabaseInstanceReplicationClusterOutput).ToDatabaseInstanceReplicationClusterPtrOutputWithContext(ctx) +} + +// DatabaseInstanceReplicationClusterPtrInput is an input type that accepts DatabaseInstanceReplicationClusterArgs, DatabaseInstanceReplicationClusterPtr and DatabaseInstanceReplicationClusterPtrOutput values. +// You can construct a concrete instance of `DatabaseInstanceReplicationClusterPtrInput` via: +// +// DatabaseInstanceReplicationClusterArgs{...} +// +// or: +// +// nil +type DatabaseInstanceReplicationClusterPtrInput interface { + pulumi.Input + + ToDatabaseInstanceReplicationClusterPtrOutput() DatabaseInstanceReplicationClusterPtrOutput + ToDatabaseInstanceReplicationClusterPtrOutputWithContext(context.Context) DatabaseInstanceReplicationClusterPtrOutput +} + +type databaseInstanceReplicationClusterPtrType DatabaseInstanceReplicationClusterArgs + +func DatabaseInstanceReplicationClusterPtr(v *DatabaseInstanceReplicationClusterArgs) DatabaseInstanceReplicationClusterPtrInput { + return (*databaseInstanceReplicationClusterPtrType)(v) +} + +func (*databaseInstanceReplicationClusterPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**DatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (i *databaseInstanceReplicationClusterPtrType) ToDatabaseInstanceReplicationClusterPtrOutput() DatabaseInstanceReplicationClusterPtrOutput { + return i.ToDatabaseInstanceReplicationClusterPtrOutputWithContext(context.Background()) +} + +func (i *databaseInstanceReplicationClusterPtrType) ToDatabaseInstanceReplicationClusterPtrOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DatabaseInstanceReplicationClusterPtrOutput) +} + +type DatabaseInstanceReplicationClusterOutput struct{ *pulumi.OutputState } + +func (DatabaseInstanceReplicationClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*DatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (o DatabaseInstanceReplicationClusterOutput) ToDatabaseInstanceReplicationClusterOutput() DatabaseInstanceReplicationClusterOutput { + return o +} + +func (o DatabaseInstanceReplicationClusterOutput) ToDatabaseInstanceReplicationClusterOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterOutput { + return o +} + +func (o DatabaseInstanceReplicationClusterOutput) ToDatabaseInstanceReplicationClusterPtrOutput() DatabaseInstanceReplicationClusterPtrOutput { + return o.ToDatabaseInstanceReplicationClusterPtrOutputWithContext(context.Background()) +} + +func (o DatabaseInstanceReplicationClusterOutput) ToDatabaseInstanceReplicationClusterPtrOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v DatabaseInstanceReplicationCluster) *DatabaseInstanceReplicationCluster { + return &v + }).(DatabaseInstanceReplicationClusterPtrOutput) +} + +// Read-only field that indicates whether the replica is a DR replica. +func (o DatabaseInstanceReplicationClusterOutput) DrReplica() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DatabaseInstanceReplicationCluster) *bool { return v.DrReplica }).(pulumi.BoolPtrOutput) +} + +// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. +func (o DatabaseInstanceReplicationClusterOutput) FailoverDrReplicaName() pulumi.StringPtrOutput { + return o.ApplyT(func(v DatabaseInstanceReplicationCluster) *string { return v.FailoverDrReplicaName }).(pulumi.StringPtrOutput) +} + +type DatabaseInstanceReplicationClusterPtrOutput struct{ *pulumi.OutputState } + +func (DatabaseInstanceReplicationClusterPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**DatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (o DatabaseInstanceReplicationClusterPtrOutput) ToDatabaseInstanceReplicationClusterPtrOutput() DatabaseInstanceReplicationClusterPtrOutput { + return o +} + +func (o DatabaseInstanceReplicationClusterPtrOutput) ToDatabaseInstanceReplicationClusterPtrOutputWithContext(ctx context.Context) DatabaseInstanceReplicationClusterPtrOutput { + return o +} + +func (o DatabaseInstanceReplicationClusterPtrOutput) Elem() DatabaseInstanceReplicationClusterOutput { + return o.ApplyT(func(v *DatabaseInstanceReplicationCluster) DatabaseInstanceReplicationCluster { + if v != nil { + return *v + } + var ret DatabaseInstanceReplicationCluster + return ret + }).(DatabaseInstanceReplicationClusterOutput) +} + +// Read-only field that indicates whether the replica is a DR replica. +func (o DatabaseInstanceReplicationClusterPtrOutput) DrReplica() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DatabaseInstanceReplicationCluster) *bool { + if v == nil { + return nil + } + return v.DrReplica + }).(pulumi.BoolPtrOutput) +} + +// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. +func (o DatabaseInstanceReplicationClusterPtrOutput) FailoverDrReplicaName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *DatabaseInstanceReplicationCluster) *string { + if v == nil { + return nil + } + return v.FailoverDrReplicaName + }).(pulumi.StringPtrOutput) +} + type DatabaseInstanceRestoreBackupContext struct { // The ID of the backup run to restore from. BackupRunId int `pulumi:"backupRunId"` @@ -5505,6 +5661,112 @@ func (o GetDatabaseInstanceReplicaConfigurationArrayOutput) Index(i pulumi.IntIn }).(GetDatabaseInstanceReplicaConfigurationOutput) } +type GetDatabaseInstanceReplicationCluster struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica bool `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName string `pulumi:"failoverDrReplicaName"` +} + +// GetDatabaseInstanceReplicationClusterInput is an input type that accepts GetDatabaseInstanceReplicationClusterArgs and GetDatabaseInstanceReplicationClusterOutput values. +// You can construct a concrete instance of `GetDatabaseInstanceReplicationClusterInput` via: +// +// GetDatabaseInstanceReplicationClusterArgs{...} +type GetDatabaseInstanceReplicationClusterInput interface { + pulumi.Input + + ToGetDatabaseInstanceReplicationClusterOutput() GetDatabaseInstanceReplicationClusterOutput + ToGetDatabaseInstanceReplicationClusterOutputWithContext(context.Context) GetDatabaseInstanceReplicationClusterOutput +} + +type GetDatabaseInstanceReplicationClusterArgs struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica pulumi.BoolInput `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName pulumi.StringInput `pulumi:"failoverDrReplicaName"` +} + +func (GetDatabaseInstanceReplicationClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetDatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (i GetDatabaseInstanceReplicationClusterArgs) ToGetDatabaseInstanceReplicationClusterOutput() GetDatabaseInstanceReplicationClusterOutput { + return i.ToGetDatabaseInstanceReplicationClusterOutputWithContext(context.Background()) +} + +func (i GetDatabaseInstanceReplicationClusterArgs) ToGetDatabaseInstanceReplicationClusterOutputWithContext(ctx context.Context) GetDatabaseInstanceReplicationClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDatabaseInstanceReplicationClusterOutput) +} + +// GetDatabaseInstanceReplicationClusterArrayInput is an input type that accepts GetDatabaseInstanceReplicationClusterArray and GetDatabaseInstanceReplicationClusterArrayOutput values. +// You can construct a concrete instance of `GetDatabaseInstanceReplicationClusterArrayInput` via: +// +// GetDatabaseInstanceReplicationClusterArray{ GetDatabaseInstanceReplicationClusterArgs{...} } +type GetDatabaseInstanceReplicationClusterArrayInput interface { + pulumi.Input + + ToGetDatabaseInstanceReplicationClusterArrayOutput() GetDatabaseInstanceReplicationClusterArrayOutput + ToGetDatabaseInstanceReplicationClusterArrayOutputWithContext(context.Context) GetDatabaseInstanceReplicationClusterArrayOutput +} + +type GetDatabaseInstanceReplicationClusterArray []GetDatabaseInstanceReplicationClusterInput + +func (GetDatabaseInstanceReplicationClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (i GetDatabaseInstanceReplicationClusterArray) ToGetDatabaseInstanceReplicationClusterArrayOutput() GetDatabaseInstanceReplicationClusterArrayOutput { + return i.ToGetDatabaseInstanceReplicationClusterArrayOutputWithContext(context.Background()) +} + +func (i GetDatabaseInstanceReplicationClusterArray) ToGetDatabaseInstanceReplicationClusterArrayOutputWithContext(ctx context.Context) GetDatabaseInstanceReplicationClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDatabaseInstanceReplicationClusterArrayOutput) +} + +type GetDatabaseInstanceReplicationClusterOutput struct{ *pulumi.OutputState } + +func (GetDatabaseInstanceReplicationClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetDatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (o GetDatabaseInstanceReplicationClusterOutput) ToGetDatabaseInstanceReplicationClusterOutput() GetDatabaseInstanceReplicationClusterOutput { + return o +} + +func (o GetDatabaseInstanceReplicationClusterOutput) ToGetDatabaseInstanceReplicationClusterOutputWithContext(ctx context.Context) GetDatabaseInstanceReplicationClusterOutput { + return o +} + +// Read-only field that indicates whether the replica is a DR replica. +func (o GetDatabaseInstanceReplicationClusterOutput) DrReplica() pulumi.BoolOutput { + return o.ApplyT(func(v GetDatabaseInstanceReplicationCluster) bool { return v.DrReplica }).(pulumi.BoolOutput) +} + +// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. +func (o GetDatabaseInstanceReplicationClusterOutput) FailoverDrReplicaName() pulumi.StringOutput { + return o.ApplyT(func(v GetDatabaseInstanceReplicationCluster) string { return v.FailoverDrReplicaName }).(pulumi.StringOutput) +} + +type GetDatabaseInstanceReplicationClusterArrayOutput struct{ *pulumi.OutputState } + +func (GetDatabaseInstanceReplicationClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDatabaseInstanceReplicationCluster)(nil)).Elem() +} + +func (o GetDatabaseInstanceReplicationClusterArrayOutput) ToGetDatabaseInstanceReplicationClusterArrayOutput() GetDatabaseInstanceReplicationClusterArrayOutput { + return o +} + +func (o GetDatabaseInstanceReplicationClusterArrayOutput) ToGetDatabaseInstanceReplicationClusterArrayOutputWithContext(ctx context.Context) GetDatabaseInstanceReplicationClusterArrayOutput { + return o +} + +func (o GetDatabaseInstanceReplicationClusterArrayOutput) Index(i pulumi.IntInput) GetDatabaseInstanceReplicationClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetDatabaseInstanceReplicationCluster { + return vs[0].([]GetDatabaseInstanceReplicationCluster)[vs[1].(int)] + }).(GetDatabaseInstanceReplicationClusterOutput) +} + type GetDatabaseInstanceRestoreBackupContext struct { // The ID of the backup run to restore from. BackupRunId int `pulumi:"backupRunId"` @@ -8045,7 +8307,9 @@ type GetDatabaseInstancesInstance struct { // The configuration for replication. ReplicaConfigurations []GetDatabaseInstancesInstanceReplicaConfiguration `pulumi:"replicaConfigurations"` // The replicas of the instance. - ReplicaNames []string `pulumi:"replicaNames"` + ReplicaNames []string `pulumi:"replicaNames"` + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + ReplicationClusters []GetDatabaseInstancesInstanceReplicationCluster `pulumi:"replicationClusters"` RestoreBackupContexts []GetDatabaseInstancesInstanceRestoreBackupContext `pulumi:"restoreBackupContexts"` // Initial root password. Required for MS SQL Server. RootPassword string `pulumi:"rootPassword"` @@ -8102,7 +8366,9 @@ type GetDatabaseInstancesInstanceArgs struct { // The configuration for replication. ReplicaConfigurations GetDatabaseInstancesInstanceReplicaConfigurationArrayInput `pulumi:"replicaConfigurations"` // The replicas of the instance. - ReplicaNames pulumi.StringArrayInput `pulumi:"replicaNames"` + ReplicaNames pulumi.StringArrayInput `pulumi:"replicaNames"` + // A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + ReplicationClusters GetDatabaseInstancesInstanceReplicationClusterArrayInput `pulumi:"replicationClusters"` RestoreBackupContexts GetDatabaseInstancesInstanceRestoreBackupContextArrayInput `pulumi:"restoreBackupContexts"` // Initial root password. Required for MS SQL Server. RootPassword pulumi.StringInput `pulumi:"rootPassword"` @@ -8261,6 +8527,13 @@ func (o GetDatabaseInstancesInstanceOutput) ReplicaNames() pulumi.StringArrayOut return o.ApplyT(func(v GetDatabaseInstancesInstance) []string { return v.ReplicaNames }).(pulumi.StringArrayOutput) } +// A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. +func (o GetDatabaseInstancesInstanceOutput) ReplicationClusters() GetDatabaseInstancesInstanceReplicationClusterArrayOutput { + return o.ApplyT(func(v GetDatabaseInstancesInstance) []GetDatabaseInstancesInstanceReplicationCluster { + return v.ReplicationClusters + }).(GetDatabaseInstancesInstanceReplicationClusterArrayOutput) +} + func (o GetDatabaseInstancesInstanceOutput) RestoreBackupContexts() GetDatabaseInstancesInstanceRestoreBackupContextArrayOutput { return o.ApplyT(func(v GetDatabaseInstancesInstance) []GetDatabaseInstancesInstanceRestoreBackupContext { return v.RestoreBackupContexts @@ -8748,6 +9021,112 @@ func (o GetDatabaseInstancesInstanceReplicaConfigurationArrayOutput) Index(i pul }).(GetDatabaseInstancesInstanceReplicaConfigurationOutput) } +type GetDatabaseInstancesInstanceReplicationCluster struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica bool `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName string `pulumi:"failoverDrReplicaName"` +} + +// GetDatabaseInstancesInstanceReplicationClusterInput is an input type that accepts GetDatabaseInstancesInstanceReplicationClusterArgs and GetDatabaseInstancesInstanceReplicationClusterOutput values. +// You can construct a concrete instance of `GetDatabaseInstancesInstanceReplicationClusterInput` via: +// +// GetDatabaseInstancesInstanceReplicationClusterArgs{...} +type GetDatabaseInstancesInstanceReplicationClusterInput interface { + pulumi.Input + + ToGetDatabaseInstancesInstanceReplicationClusterOutput() GetDatabaseInstancesInstanceReplicationClusterOutput + ToGetDatabaseInstancesInstanceReplicationClusterOutputWithContext(context.Context) GetDatabaseInstancesInstanceReplicationClusterOutput +} + +type GetDatabaseInstancesInstanceReplicationClusterArgs struct { + // Read-only field that indicates whether the replica is a DR replica. + DrReplica pulumi.BoolInput `pulumi:"drReplica"` + // If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + FailoverDrReplicaName pulumi.StringInput `pulumi:"failoverDrReplicaName"` +} + +func (GetDatabaseInstancesInstanceReplicationClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetDatabaseInstancesInstanceReplicationCluster)(nil)).Elem() +} + +func (i GetDatabaseInstancesInstanceReplicationClusterArgs) ToGetDatabaseInstancesInstanceReplicationClusterOutput() GetDatabaseInstancesInstanceReplicationClusterOutput { + return i.ToGetDatabaseInstancesInstanceReplicationClusterOutputWithContext(context.Background()) +} + +func (i GetDatabaseInstancesInstanceReplicationClusterArgs) ToGetDatabaseInstancesInstanceReplicationClusterOutputWithContext(ctx context.Context) GetDatabaseInstancesInstanceReplicationClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDatabaseInstancesInstanceReplicationClusterOutput) +} + +// GetDatabaseInstancesInstanceReplicationClusterArrayInput is an input type that accepts GetDatabaseInstancesInstanceReplicationClusterArray and GetDatabaseInstancesInstanceReplicationClusterArrayOutput values. +// You can construct a concrete instance of `GetDatabaseInstancesInstanceReplicationClusterArrayInput` via: +// +// GetDatabaseInstancesInstanceReplicationClusterArray{ GetDatabaseInstancesInstanceReplicationClusterArgs{...} } +type GetDatabaseInstancesInstanceReplicationClusterArrayInput interface { + pulumi.Input + + ToGetDatabaseInstancesInstanceReplicationClusterArrayOutput() GetDatabaseInstancesInstanceReplicationClusterArrayOutput + ToGetDatabaseInstancesInstanceReplicationClusterArrayOutputWithContext(context.Context) GetDatabaseInstancesInstanceReplicationClusterArrayOutput +} + +type GetDatabaseInstancesInstanceReplicationClusterArray []GetDatabaseInstancesInstanceReplicationClusterInput + +func (GetDatabaseInstancesInstanceReplicationClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDatabaseInstancesInstanceReplicationCluster)(nil)).Elem() +} + +func (i GetDatabaseInstancesInstanceReplicationClusterArray) ToGetDatabaseInstancesInstanceReplicationClusterArrayOutput() GetDatabaseInstancesInstanceReplicationClusterArrayOutput { + return i.ToGetDatabaseInstancesInstanceReplicationClusterArrayOutputWithContext(context.Background()) +} + +func (i GetDatabaseInstancesInstanceReplicationClusterArray) ToGetDatabaseInstancesInstanceReplicationClusterArrayOutputWithContext(ctx context.Context) GetDatabaseInstancesInstanceReplicationClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetDatabaseInstancesInstanceReplicationClusterArrayOutput) +} + +type GetDatabaseInstancesInstanceReplicationClusterOutput struct{ *pulumi.OutputState } + +func (GetDatabaseInstancesInstanceReplicationClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetDatabaseInstancesInstanceReplicationCluster)(nil)).Elem() +} + +func (o GetDatabaseInstancesInstanceReplicationClusterOutput) ToGetDatabaseInstancesInstanceReplicationClusterOutput() GetDatabaseInstancesInstanceReplicationClusterOutput { + return o +} + +func (o GetDatabaseInstancesInstanceReplicationClusterOutput) ToGetDatabaseInstancesInstanceReplicationClusterOutputWithContext(ctx context.Context) GetDatabaseInstancesInstanceReplicationClusterOutput { + return o +} + +// Read-only field that indicates whether the replica is a DR replica. +func (o GetDatabaseInstancesInstanceReplicationClusterOutput) DrReplica() pulumi.BoolOutput { + return o.ApplyT(func(v GetDatabaseInstancesInstanceReplicationCluster) bool { return v.DrReplica }).(pulumi.BoolOutput) +} + +// If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. +func (o GetDatabaseInstancesInstanceReplicationClusterOutput) FailoverDrReplicaName() pulumi.StringOutput { + return o.ApplyT(func(v GetDatabaseInstancesInstanceReplicationCluster) string { return v.FailoverDrReplicaName }).(pulumi.StringOutput) +} + +type GetDatabaseInstancesInstanceReplicationClusterArrayOutput struct{ *pulumi.OutputState } + +func (GetDatabaseInstancesInstanceReplicationClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetDatabaseInstancesInstanceReplicationCluster)(nil)).Elem() +} + +func (o GetDatabaseInstancesInstanceReplicationClusterArrayOutput) ToGetDatabaseInstancesInstanceReplicationClusterArrayOutput() GetDatabaseInstancesInstanceReplicationClusterArrayOutput { + return o +} + +func (o GetDatabaseInstancesInstanceReplicationClusterArrayOutput) ToGetDatabaseInstancesInstanceReplicationClusterArrayOutputWithContext(ctx context.Context) GetDatabaseInstancesInstanceReplicationClusterArrayOutput { + return o +} + +func (o GetDatabaseInstancesInstanceReplicationClusterArrayOutput) Index(i pulumi.IntInput) GetDatabaseInstancesInstanceReplicationClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetDatabaseInstancesInstanceReplicationCluster { + return vs[0].([]GetDatabaseInstancesInstanceReplicationCluster)[vs[1].(int)] + }).(GetDatabaseInstancesInstanceReplicationClusterOutput) +} + type GetDatabaseInstancesInstanceRestoreBackupContext struct { // The ID of the backup run to restore from. BackupRunId int `pulumi:"backupRunId"` @@ -11589,6 +11968,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceIpAddressArrayInput)(nil)).Elem(), DatabaseInstanceIpAddressArray{}) pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceReplicaConfigurationInput)(nil)).Elem(), DatabaseInstanceReplicaConfigurationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceReplicaConfigurationPtrInput)(nil)).Elem(), DatabaseInstanceReplicaConfigurationArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceReplicationClusterInput)(nil)).Elem(), DatabaseInstanceReplicationClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceReplicationClusterPtrInput)(nil)).Elem(), DatabaseInstanceReplicationClusterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceRestoreBackupContextInput)(nil)).Elem(), DatabaseInstanceRestoreBackupContextArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceRestoreBackupContextPtrInput)(nil)).Elem(), DatabaseInstanceRestoreBackupContextArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DatabaseInstanceServerCaCertInput)(nil)).Elem(), DatabaseInstanceServerCaCertArgs{}) @@ -11641,6 +12022,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceIpAddressArrayInput)(nil)).Elem(), GetDatabaseInstanceIpAddressArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceReplicaConfigurationInput)(nil)).Elem(), GetDatabaseInstanceReplicaConfigurationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceReplicaConfigurationArrayInput)(nil)).Elem(), GetDatabaseInstanceReplicaConfigurationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceReplicationClusterInput)(nil)).Elem(), GetDatabaseInstanceReplicationClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceReplicationClusterArrayInput)(nil)).Elem(), GetDatabaseInstanceReplicationClusterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceRestoreBackupContextInput)(nil)).Elem(), GetDatabaseInstanceRestoreBackupContextArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceRestoreBackupContextArrayInput)(nil)).Elem(), GetDatabaseInstanceRestoreBackupContextArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstanceServerCaCertInput)(nil)).Elem(), GetDatabaseInstanceServerCaCertArgs{}) @@ -11687,6 +12070,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceIpAddressArrayInput)(nil)).Elem(), GetDatabaseInstancesInstanceIpAddressArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceReplicaConfigurationInput)(nil)).Elem(), GetDatabaseInstancesInstanceReplicaConfigurationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceReplicaConfigurationArrayInput)(nil)).Elem(), GetDatabaseInstancesInstanceReplicaConfigurationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceReplicationClusterInput)(nil)).Elem(), GetDatabaseInstancesInstanceReplicationClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceReplicationClusterArrayInput)(nil)).Elem(), GetDatabaseInstancesInstanceReplicationClusterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceRestoreBackupContextInput)(nil)).Elem(), GetDatabaseInstancesInstanceRestoreBackupContextArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceRestoreBackupContextArrayInput)(nil)).Elem(), GetDatabaseInstancesInstanceRestoreBackupContextArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatabaseInstancesInstanceServerCaCertInput)(nil)).Elem(), GetDatabaseInstancesInstanceServerCaCertArgs{}) @@ -11735,6 +12120,8 @@ func init() { pulumi.RegisterOutputType(DatabaseInstanceIpAddressArrayOutput{}) pulumi.RegisterOutputType(DatabaseInstanceReplicaConfigurationOutput{}) pulumi.RegisterOutputType(DatabaseInstanceReplicaConfigurationPtrOutput{}) + pulumi.RegisterOutputType(DatabaseInstanceReplicationClusterOutput{}) + pulumi.RegisterOutputType(DatabaseInstanceReplicationClusterPtrOutput{}) pulumi.RegisterOutputType(DatabaseInstanceRestoreBackupContextOutput{}) pulumi.RegisterOutputType(DatabaseInstanceRestoreBackupContextPtrOutput{}) pulumi.RegisterOutputType(DatabaseInstanceServerCaCertOutput{}) @@ -11787,6 +12174,8 @@ func init() { pulumi.RegisterOutputType(GetDatabaseInstanceIpAddressArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstanceReplicaConfigurationOutput{}) pulumi.RegisterOutputType(GetDatabaseInstanceReplicaConfigurationArrayOutput{}) + pulumi.RegisterOutputType(GetDatabaseInstanceReplicationClusterOutput{}) + pulumi.RegisterOutputType(GetDatabaseInstanceReplicationClusterArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstanceRestoreBackupContextOutput{}) pulumi.RegisterOutputType(GetDatabaseInstanceRestoreBackupContextArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstanceServerCaCertOutput{}) @@ -11833,6 +12222,8 @@ func init() { pulumi.RegisterOutputType(GetDatabaseInstancesInstanceIpAddressArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstancesInstanceReplicaConfigurationOutput{}) pulumi.RegisterOutputType(GetDatabaseInstancesInstanceReplicaConfigurationArrayOutput{}) + pulumi.RegisterOutputType(GetDatabaseInstancesInstanceReplicationClusterOutput{}) + pulumi.RegisterOutputType(GetDatabaseInstancesInstanceReplicationClusterArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstancesInstanceRestoreBackupContextOutput{}) pulumi.RegisterOutputType(GetDatabaseInstancesInstanceRestoreBackupContextArrayOutput{}) pulumi.RegisterOutputType(GetDatabaseInstancesInstanceServerCaCertOutput{}) diff --git a/sdk/go/gcp/sql/sourceRepresentationInstance.go b/sdk/go/gcp/sql/sourceRepresentationInstance.go index bd443017aa..9daf434dab 100644 --- a/sdk/go/gcp/sql/sourceRepresentationInstance.go +++ b/sdk/go/gcp/sql/sourceRepresentationInstance.go @@ -117,8 +117,7 @@ type SourceRepresentationInstance struct { ClientCertificate pulumi.StringPtrOutput `pulumi:"clientCertificate"` // The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. ClientKey pulumi.StringPtrOutput `pulumi:"clientKey"` - // The MySQL version running on your source database server. - // Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + // The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringOutput `pulumi:"databaseVersion"` // A file in the bucket that contains the data from the external server. DumpFilePath pulumi.StringPtrOutput `pulumi:"dumpFilePath"` @@ -193,8 +192,7 @@ type sourceRepresentationInstanceState struct { ClientCertificate *string `pulumi:"clientCertificate"` // The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. ClientKey *string `pulumi:"clientKey"` - // The MySQL version running on your source database server. - // Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + // The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. DatabaseVersion *string `pulumi:"databaseVersion"` // A file in the bucket that contains the data from the external server. DumpFilePath *string `pulumi:"dumpFilePath"` @@ -227,8 +225,7 @@ type SourceRepresentationInstanceState struct { ClientCertificate pulumi.StringPtrInput // The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. ClientKey pulumi.StringPtrInput - // The MySQL version running on your source database server. - // Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + // The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringPtrInput // A file in the bucket that contains the data from the external server. DumpFilePath pulumi.StringPtrInput @@ -265,8 +262,7 @@ type sourceRepresentationInstanceArgs struct { ClientCertificate *string `pulumi:"clientCertificate"` // The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. ClientKey *string `pulumi:"clientKey"` - // The MySQL version running on your source database server. - // Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + // The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. DatabaseVersion string `pulumi:"databaseVersion"` // A file in the bucket that contains the data from the external server. DumpFilePath *string `pulumi:"dumpFilePath"` @@ -300,8 +296,7 @@ type SourceRepresentationInstanceArgs struct { ClientCertificate pulumi.StringPtrInput // The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. ClientKey pulumi.StringPtrInput - // The MySQL version running on your source database server. - // Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + // The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringInput // A file in the bucket that contains the data from the external server. DumpFilePath pulumi.StringPtrInput @@ -429,8 +424,7 @@ func (o SourceRepresentationInstanceOutput) ClientKey() pulumi.StringPtrOutput { return o.ApplyT(func(v *SourceRepresentationInstance) pulumi.StringPtrOutput { return v.ClientKey }).(pulumi.StringPtrOutput) } -// The MySQL version running on your source database server. -// Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. +// The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. func (o SourceRepresentationInstanceOutput) DatabaseVersion() pulumi.StringOutput { return o.ApplyT(func(v *SourceRepresentationInstance) pulumi.StringOutput { return v.DatabaseVersion }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/vertex/aiEndpoint.go b/sdk/go/gcp/vertex/aiEndpoint.go index 50ffef59ab..1f43e419bb 100644 --- a/sdk/go/gcp/vertex/aiEndpoint.go +++ b/sdk/go/gcp/vertex/aiEndpoint.go @@ -155,7 +155,7 @@ import ( // return err // } // _, err = vertex.NewAiEndpoint(ctx, "endpoint", &vertex.AiEndpointArgs{ -// Name: pulumi.String("endpoint-name_89313"), +// Name: pulumi.String("endpoint-name_60646"), // DisplayName: pulumi.String("sample-endpoint"), // Description: pulumi.String("A sample vertex endpoint"), // Location: pulumi.String("us-central1"), @@ -195,7 +195,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := vertex.NewAiEndpoint(ctx, "endpoint", &vertex.AiEndpointArgs{ -// Name: pulumi.String("endpoint-name_60646"), +// Name: pulumi.String("endpoint-name_9394"), // DisplayName: pulumi.String("sample-endpoint"), // Description: pulumi.String("A sample vertex endpoint"), // Location: pulumi.String("us-central1"), diff --git a/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go b/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go index bdaaa728a9..d0a1c4bf83 100644 --- a/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go +++ b/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go @@ -286,8 +286,8 @@ import ( // return err // } // project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test_9394"), -// Name: pulumi.String("tf-test_11380"), +// ProjectId: pulumi.String("tf-test_11380"), +// Name: pulumi.String("tf-test_35305"), // OrgId: pulumi.String("123456789"), // BillingAccount: pulumi.String("000000-0000000-0000000-000000"), // DeletionPolicy: pulumi.String("DELETE"), diff --git a/sdk/java/src/main/java/com/pulumi/gcp/Config.java b/sdk/java/src/main/java/com/pulumi/gcp/Config.java index bd6ea1523f..a68677e18f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Config.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Config.java @@ -156,6 +156,9 @@ public Optional clouddomainsCustomEndpoint() { public Optional cloudfunctions2CustomEndpoint() { return Codegen.stringProp("cloudfunctions2CustomEndpoint").config(config).get(); } + public Optional colabCustomEndpoint() { + return Codegen.stringProp("colabCustomEndpoint").config(config).get(); + } public Optional composerCustomEndpoint() { return Codegen.stringProp("composerCustomEndpoint").config(config).get(); } @@ -411,6 +414,12 @@ public Optional osLoginCustomEndpoint() { public Optional parallelstoreCustomEndpoint() { return Codegen.stringProp("parallelstoreCustomEndpoint").config(config).get(); } + public Optional parameterManagerCustomEndpoint() { + return Codegen.stringProp("parameterManagerCustomEndpoint").config(config).get(); + } + public Optional parameterManagerRegionalCustomEndpoint() { + return Codegen.stringProp("parameterManagerRegionalCustomEndpoint").config(config).get(); + } public Optional privatecaCustomEndpoint() { return Codegen.stringProp("privatecaCustomEndpoint").config(config).get(); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java index a43661833f..c3a2da1e93 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java @@ -293,6 +293,12 @@ public Output> clouddomainsCustomEndpoint() { public Output> cloudfunctions2CustomEndpoint() { return Codegen.optional(this.cloudfunctions2CustomEndpoint); } + @Export(name="colabCustomEndpoint", refs={String.class}, tree="[0]") + private Output colabCustomEndpoint; + + public Output> colabCustomEndpoint() { + return Codegen.optional(this.colabCustomEndpoint); + } @Export(name="composerCustomEndpoint", refs={String.class}, tree="[0]") private Output composerCustomEndpoint; @@ -779,6 +785,18 @@ public Output> osLoginCustomEndpoint() { public Output> parallelstoreCustomEndpoint() { return Codegen.optional(this.parallelstoreCustomEndpoint); } + @Export(name="parameterManagerCustomEndpoint", refs={String.class}, tree="[0]") + private Output parameterManagerCustomEndpoint; + + public Output> parameterManagerCustomEndpoint() { + return Codegen.optional(this.parameterManagerCustomEndpoint); + } + @Export(name="parameterManagerRegionalCustomEndpoint", refs={String.class}, tree="[0]") + private Output parameterManagerRegionalCustomEndpoint; + + public Output> parameterManagerRegionalCustomEndpoint() { + return Codegen.optional(this.parameterManagerRegionalCustomEndpoint); + } @Export(name="privatecaCustomEndpoint", refs={String.class}, tree="[0]") private Output privatecaCustomEndpoint; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java index e61a94b9ab..0e7c61c0c5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java @@ -349,6 +349,13 @@ public Optional> cloudfunctions2CustomEndpoint() { return Optional.ofNullable(this.cloudfunctions2CustomEndpoint); } + @Import(name="colabCustomEndpoint") + private @Nullable Output colabCustomEndpoint; + + public Optional> colabCustomEndpoint() { + return Optional.ofNullable(this.colabCustomEndpoint); + } + @Import(name="composerCustomEndpoint") private @Nullable Output composerCustomEndpoint; @@ -937,6 +944,20 @@ public Optional> parallelstoreCustomEndpoint() { return Optional.ofNullable(this.parallelstoreCustomEndpoint); } + @Import(name="parameterManagerCustomEndpoint") + private @Nullable Output parameterManagerCustomEndpoint; + + public Optional> parameterManagerCustomEndpoint() { + return Optional.ofNullable(this.parameterManagerCustomEndpoint); + } + + @Import(name="parameterManagerRegionalCustomEndpoint") + private @Nullable Output parameterManagerRegionalCustomEndpoint; + + public Optional> parameterManagerRegionalCustomEndpoint() { + return Optional.ofNullable(this.parameterManagerRegionalCustomEndpoint); + } + @Import(name="privatecaCustomEndpoint") private @Nullable Output privatecaCustomEndpoint; @@ -1337,6 +1358,7 @@ private ProviderArgs(ProviderArgs $) { this.clouddeployCustomEndpoint = $.clouddeployCustomEndpoint; this.clouddomainsCustomEndpoint = $.clouddomainsCustomEndpoint; this.cloudfunctions2CustomEndpoint = $.cloudfunctions2CustomEndpoint; + this.colabCustomEndpoint = $.colabCustomEndpoint; this.composerCustomEndpoint = $.composerCustomEndpoint; this.computeCustomEndpoint = $.computeCustomEndpoint; this.containerAnalysisCustomEndpoint = $.containerAnalysisCustomEndpoint; @@ -1421,6 +1443,8 @@ private ProviderArgs(ProviderArgs $) { this.osConfigCustomEndpoint = $.osConfigCustomEndpoint; this.osLoginCustomEndpoint = $.osLoginCustomEndpoint; this.parallelstoreCustomEndpoint = $.parallelstoreCustomEndpoint; + this.parameterManagerCustomEndpoint = $.parameterManagerCustomEndpoint; + this.parameterManagerRegionalCustomEndpoint = $.parameterManagerRegionalCustomEndpoint; this.privatecaCustomEndpoint = $.privatecaCustomEndpoint; this.privilegedAccessManagerCustomEndpoint = $.privilegedAccessManagerCustomEndpoint; this.project = $.project; @@ -1914,6 +1938,15 @@ public Builder cloudfunctions2CustomEndpoint(String cloudfunctions2CustomEndpoin return cloudfunctions2CustomEndpoint(Output.of(cloudfunctions2CustomEndpoint)); } + public Builder colabCustomEndpoint(@Nullable Output colabCustomEndpoint) { + $.colabCustomEndpoint = colabCustomEndpoint; + return this; + } + + public Builder colabCustomEndpoint(String colabCustomEndpoint) { + return colabCustomEndpoint(Output.of(colabCustomEndpoint)); + } + public Builder composerCustomEndpoint(@Nullable Output composerCustomEndpoint) { $.composerCustomEndpoint = composerCustomEndpoint; return this; @@ -2674,6 +2707,24 @@ public Builder parallelstoreCustomEndpoint(String parallelstoreCustomEndpoint) { return parallelstoreCustomEndpoint(Output.of(parallelstoreCustomEndpoint)); } + public Builder parameterManagerCustomEndpoint(@Nullable Output parameterManagerCustomEndpoint) { + $.parameterManagerCustomEndpoint = parameterManagerCustomEndpoint; + return this; + } + + public Builder parameterManagerCustomEndpoint(String parameterManagerCustomEndpoint) { + return parameterManagerCustomEndpoint(Output.of(parameterManagerCustomEndpoint)); + } + + public Builder parameterManagerRegionalCustomEndpoint(@Nullable Output parameterManagerRegionalCustomEndpoint) { + $.parameterManagerRegionalCustomEndpoint = parameterManagerRegionalCustomEndpoint; + return this; + } + + public Builder parameterManagerRegionalCustomEndpoint(String parameterManagerRegionalCustomEndpoint) { + return parameterManagerRegionalCustomEndpoint(Output.of(parameterManagerRegionalCustomEndpoint)); + } + public Builder privatecaCustomEndpoint(@Nullable Output privatecaCustomEndpoint) { $.privatecaCustomEndpoint = privatecaCustomEndpoint; return this; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/AccessLevelCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/AccessLevelCondition.java index 5a2e061deb..9b8df7320f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/AccessLevelCondition.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/AccessLevelCondition.java @@ -156,6 +156,20 @@ public class AccessLevelCondition extends com.pulumi.resources.CustomResource { public Output accessLevel() { return this.accessLevel; } + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * Device specific restrictions, all restrictions must hold for * the Condition to be true. If not specified, all devices are diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/EgressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/EgressPolicy.java index 62df3e3fb3..9fdf3a1938 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/EgressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/EgressPolicy.java @@ -35,6 +35,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/egressPolicy:EgressPolicy") public class EgressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/IngressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/IngressPolicy.java index 47e023db83..5c04bc40e6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/IngressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/IngressPolicy.java @@ -35,6 +35,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/ingressPolicy:IngressPolicy") public class IngressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java index ca3c6bfcbd..40641f9f95 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java @@ -44,6 +44,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy") public class ServicePerimeterDryRunEgressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java index 7d513c1f7e..dd51854c73 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java @@ -45,6 +45,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy") public class ServicePerimeterDryRunIngressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunResource.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunResource.java index 6af7d59055..9f55a5e132 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunResource.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunResource.java @@ -109,6 +109,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource") public class ServicePerimeterDryRunResource extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java index 104b885f96..bd7ab64881 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java @@ -44,6 +44,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy") public class ServicePerimeterEgressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java index f211da8bed..ce12b06da6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java @@ -45,6 +45,20 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy") public class ServicePerimeterIngressPolicy extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterResource.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterResource.java index 57abc440f1..33004f8cf5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterResource.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterResource.java @@ -108,6 +108,34 @@ */ @ResourceType(type="gcp:accesscontextmanager/servicePerimeterResource:ServicePerimeterResource") public class ServicePerimeterResource extends com.pulumi.resources.CustomResource { + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Export(name="accessPolicyId", refs={String.class}, tree="[0]") + private Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Output accessPolicyId() { + return this.accessPolicyId; + } + /** + * The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + */ + public Output etag() { + return this.etag; + } /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/AccessLevelConditionState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/AccessLevelConditionState.java index 47a4903a7f..9229b0398f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/AccessLevelConditionState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/AccessLevelConditionState.java @@ -38,6 +38,21 @@ public Optional> accessLevel() { return Optional.ofNullable(this.accessLevel); } + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * Device specific restrictions, all restrictions must hold for * the Condition to be true. If not specified, all devices are @@ -201,6 +216,7 @@ private AccessLevelConditionState() {} private AccessLevelConditionState(AccessLevelConditionState $) { this.accessLevel = $.accessLevel; + this.accessPolicyId = $.accessPolicyId; this.devicePolicy = $.devicePolicy; this.ipSubnetworks = $.ipSubnetworks; this.members = $.members; @@ -253,6 +269,27 @@ public Builder accessLevel(String accessLevel) { return accessLevel(Output.of(accessLevel)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param devicePolicy Device specific restrictions, all restrictions must hold for * the Condition to be true. If not specified, all devices are diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/EgressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/EgressPolicyState.java index 3bbb2c6515..51838ac422 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/EgressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/EgressPolicyState.java @@ -15,6 +15,21 @@ public final class EgressPolicyState extends com.pulumi.resources.ResourceArgs { public static final EgressPolicyState Empty = new EgressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * The name of the Service Perimeter to add this resource to. * @@ -52,6 +67,7 @@ public Optional> resource() { private EgressPolicyState() {} private EgressPolicyState(EgressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.egressPolicyName = $.egressPolicyName; this.resource = $.resource; } @@ -74,6 +90,27 @@ public Builder(EgressPolicyState defaults) { $ = new EgressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param egressPolicyName The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/IngressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/IngressPolicyState.java index 4b73491772..91cf14e9a3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/IngressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/IngressPolicyState.java @@ -15,6 +15,21 @@ public final class IngressPolicyState extends com.pulumi.resources.ResourceArgs public static final IngressPolicyState Empty = new IngressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * The name of the Service Perimeter to add this resource to. * @@ -52,6 +67,7 @@ public Optional> resource() { private IngressPolicyState() {} private IngressPolicyState(IngressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.ingressPolicyName = $.ingressPolicyName; this.resource = $.resource; } @@ -74,6 +90,27 @@ public Builder(IngressPolicyState defaults) { $ = new IngressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param ingressPolicyName The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunEgressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunEgressPolicyState.java index 765d38fffc..f108c68a81 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunEgressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunEgressPolicyState.java @@ -17,6 +17,21 @@ public final class ServicePerimeterDryRunEgressPolicyState extends com.pulumi.re public static final ServicePerimeterDryRunEgressPolicyState Empty = new ServicePerimeterDryRunEgressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. @@ -75,6 +90,7 @@ public Optional> perimeter() { private ServicePerimeterDryRunEgressPolicyState() {} private ServicePerimeterDryRunEgressPolicyState(ServicePerimeterDryRunEgressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.egressFrom = $.egressFrom; this.egressTo = $.egressTo; this.perimeter = $.perimeter; @@ -98,6 +114,27 @@ public Builder(ServicePerimeterDryRunEgressPolicyState defaults) { $ = new ServicePerimeterDryRunEgressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param egressFrom Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunIngressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunIngressPolicyState.java index bec09d355d..076072f577 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunIngressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunIngressPolicyState.java @@ -17,6 +17,21 @@ public final class ServicePerimeterDryRunIngressPolicyState extends com.pulumi.r public static final ServicePerimeterDryRunIngressPolicyState Empty = new ServicePerimeterDryRunIngressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. @@ -77,6 +92,7 @@ public Optional> perimeter() { private ServicePerimeterDryRunIngressPolicyState() {} private ServicePerimeterDryRunIngressPolicyState(ServicePerimeterDryRunIngressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.ingressFrom = $.ingressFrom; this.ingressTo = $.ingressTo; this.perimeter = $.perimeter; @@ -100,6 +116,27 @@ public Builder(ServicePerimeterDryRunIngressPolicyState defaults) { $ = new ServicePerimeterDryRunIngressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param ingressFrom Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunResourceState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunResourceState.java index 2dc16eb289..45b788d868 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunResourceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterDryRunResourceState.java @@ -15,6 +15,21 @@ public final class ServicePerimeterDryRunResourceState extends com.pulumi.resour public static final ServicePerimeterDryRunResourceState Empty = new ServicePerimeterDryRunResourceState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * The name of the Service Perimeter to add this resource to. * @@ -56,6 +71,7 @@ public Optional> resource() { private ServicePerimeterDryRunResourceState() {} private ServicePerimeterDryRunResourceState(ServicePerimeterDryRunResourceState $) { + this.accessPolicyId = $.accessPolicyId; this.perimeterName = $.perimeterName; this.resource = $.resource; } @@ -78,6 +94,27 @@ public Builder(ServicePerimeterDryRunResourceState defaults) { $ = new ServicePerimeterDryRunResourceState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param perimeterName The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterEgressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterEgressPolicyState.java index a6ff1ec2ae..536dd4681a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterEgressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterEgressPolicyState.java @@ -17,6 +17,21 @@ public final class ServicePerimeterEgressPolicyState extends com.pulumi.resource public static final ServicePerimeterEgressPolicyState Empty = new ServicePerimeterEgressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. @@ -75,6 +90,7 @@ public Optional> perimeter() { private ServicePerimeterEgressPolicyState() {} private ServicePerimeterEgressPolicyState(ServicePerimeterEgressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.egressFrom = $.egressFrom; this.egressTo = $.egressTo; this.perimeter = $.perimeter; @@ -98,6 +114,27 @@ public Builder(ServicePerimeterEgressPolicyState defaults) { $ = new ServicePerimeterEgressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param egressFrom Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterIngressPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterIngressPolicyState.java index a31f56e3ba..ec3f058ef8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterIngressPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterIngressPolicyState.java @@ -17,6 +17,21 @@ public final class ServicePerimeterIngressPolicyState extends com.pulumi.resourc public static final ServicePerimeterIngressPolicyState Empty = new ServicePerimeterIngressPolicyState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. @@ -77,6 +92,7 @@ public Optional> perimeter() { private ServicePerimeterIngressPolicyState() {} private ServicePerimeterIngressPolicyState(ServicePerimeterIngressPolicyState $) { + this.accessPolicyId = $.accessPolicyId; this.ingressFrom = $.ingressFrom; this.ingressTo = $.ingressTo; this.perimeter = $.perimeter; @@ -100,6 +116,27 @@ public Builder(ServicePerimeterIngressPolicyState defaults) { $ = new ServicePerimeterIngressPolicyState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + /** * @param ingressFrom Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterResourceState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterResourceState.java index e50d59fe51..0f05b0ef53 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterResourceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterResourceState.java @@ -15,6 +15,36 @@ public final class ServicePerimeterResourceState extends com.pulumi.resources.Re public static final ServicePerimeterResourceState Empty = new ServicePerimeterResourceState(); + /** + * The name of the Access Policy this resource belongs to. + * + */ + @Import(name="accessPolicyId") + private @Nullable Output accessPolicyId; + + /** + * @return The name of the Access Policy this resource belongs to. + * + */ + public Optional> accessPolicyId() { + return Optional.ofNullable(this.accessPolicyId); + } + + /** + * The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + /** * The name of the Service Perimeter to add this resource to. * @@ -56,6 +86,8 @@ public Optional> resource() { private ServicePerimeterResourceState() {} private ServicePerimeterResourceState(ServicePerimeterResourceState $) { + this.accessPolicyId = $.accessPolicyId; + this.etag = $.etag; this.perimeterName = $.perimeterName; this.resource = $.resource; } @@ -78,6 +110,48 @@ public Builder(ServicePerimeterResourceState defaults) { $ = new ServicePerimeterResourceState(Objects.requireNonNull(defaults)); } + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(@Nullable Output accessPolicyId) { + $.accessPolicyId = accessPolicyId; + return this; + } + + /** + * @param accessPolicyId The name of the Access Policy this resource belongs to. + * + * @return builder + * + */ + public Builder accessPolicyId(String accessPolicyId) { + return accessPolicyId(Output.of(accessPolicyId)); + } + + /** + * @param etag The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + /** * @param perimeterName The name of the Service Perimeter to add this resource to. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfig.java new file mode 100644 index 0000000000..e9cb373491 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfig.java @@ -0,0 +1,134 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.apigee; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.apigee.EnvironmentAddonsConfigArgs; +import com.pulumi.gcp.apigee.inputs.EnvironmentAddonsConfigState; +import java.lang.Boolean; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Enable/Disable add-ons for an Apigee environment. + * + * To get more information about EnvironmentAddonsConfig, see: + * + * * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) + * * How-to Guides + * * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) + * + * ## Example Usage + * + * ## Import + * + * EnvironmentAddonsConfig can be imported using any of these accepted formats: + * + * * `{{env_id}}` + * + * When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} + * ``` + * + */ +@ResourceType(type="gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig") +public class EnvironmentAddonsConfig extends com.pulumi.resources.CustomResource { + /** + * Flag to enable/disable Analytics. + * + */ + @Export(name="analyticsEnabled", refs={Boolean.class}, tree="[0]") + private Output analyticsEnabled; + + /** + * @return Flag to enable/disable Analytics. + * + */ + public Output> analyticsEnabled() { + return Codegen.optional(this.analyticsEnabled); + } + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + @Export(name="envId", refs={String.class}, tree="[0]") + private Output envId; + + /** + * @return The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + public Output envId() { + return this.envId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public EnvironmentAddonsConfig(java.lang.String name) { + this(name, EnvironmentAddonsConfigArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public EnvironmentAddonsConfig(java.lang.String name, EnvironmentAddonsConfigArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public EnvironmentAddonsConfig(java.lang.String name, EnvironmentAddonsConfigArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private EnvironmentAddonsConfig(java.lang.String name, Output id, @Nullable EnvironmentAddonsConfigState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig", name, state, makeResourceOptions(options, id), false); + } + + private static EnvironmentAddonsConfigArgs makeArgs(EnvironmentAddonsConfigArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? EnvironmentAddonsConfigArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static EnvironmentAddonsConfig get(java.lang.String name, Output id, @Nullable EnvironmentAddonsConfigState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new EnvironmentAddonsConfig(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfigArgs.java new file mode 100644 index 0000000000..9ee2aed920 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvironmentAddonsConfigArgs.java @@ -0,0 +1,137 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.apigee; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EnvironmentAddonsConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final EnvironmentAddonsConfigArgs Empty = new EnvironmentAddonsConfigArgs(); + + /** + * Flag to enable/disable Analytics. + * + */ + @Import(name="analyticsEnabled") + private @Nullable Output analyticsEnabled; + + /** + * @return Flag to enable/disable Analytics. + * + */ + public Optional> analyticsEnabled() { + return Optional.ofNullable(this.analyticsEnabled); + } + + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + @Import(name="envId", required=true) + private Output envId; + + /** + * @return The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + public Output envId() { + return this.envId; + } + + private EnvironmentAddonsConfigArgs() {} + + private EnvironmentAddonsConfigArgs(EnvironmentAddonsConfigArgs $) { + this.analyticsEnabled = $.analyticsEnabled; + this.envId = $.envId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EnvironmentAddonsConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EnvironmentAddonsConfigArgs $; + + public Builder() { + $ = new EnvironmentAddonsConfigArgs(); + } + + public Builder(EnvironmentAddonsConfigArgs defaults) { + $ = new EnvironmentAddonsConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param analyticsEnabled Flag to enable/disable Analytics. + * + * @return builder + * + */ + public Builder analyticsEnabled(@Nullable Output analyticsEnabled) { + $.analyticsEnabled = analyticsEnabled; + return this; + } + + /** + * @param analyticsEnabled Flag to enable/disable Analytics. + * + * @return builder + * + */ + public Builder analyticsEnabled(Boolean analyticsEnabled) { + return analyticsEnabled(Output.of(analyticsEnabled)); + } + + /** + * @param envId The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + * @return builder + * + */ + public Builder envId(Output envId) { + $.envId = envId; + return this; + } + + /** + * @param envId The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + * @return builder + * + */ + public Builder envId(String envId) { + return envId(Output.of(envId)); + } + + public EnvironmentAddonsConfigArgs build() { + if ($.envId == null) { + throw new MissingRequiredPropertyException("EnvironmentAddonsConfigArgs", "envId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/EnvironmentAddonsConfigState.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/EnvironmentAddonsConfigState.java new file mode 100644 index 0000000000..dccb1f0b94 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/EnvironmentAddonsConfigState.java @@ -0,0 +1,133 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.apigee.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class EnvironmentAddonsConfigState extends com.pulumi.resources.ResourceArgs { + + public static final EnvironmentAddonsConfigState Empty = new EnvironmentAddonsConfigState(); + + /** + * Flag to enable/disable Analytics. + * + */ + @Import(name="analyticsEnabled") + private @Nullable Output analyticsEnabled; + + /** + * @return Flag to enable/disable Analytics. + * + */ + public Optional> analyticsEnabled() { + return Optional.ofNullable(this.analyticsEnabled); + } + + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + @Import(name="envId") + private @Nullable Output envId; + + /** + * @return The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + */ + public Optional> envId() { + return Optional.ofNullable(this.envId); + } + + private EnvironmentAddonsConfigState() {} + + private EnvironmentAddonsConfigState(EnvironmentAddonsConfigState $) { + this.analyticsEnabled = $.analyticsEnabled; + this.envId = $.envId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EnvironmentAddonsConfigState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EnvironmentAddonsConfigState $; + + public Builder() { + $ = new EnvironmentAddonsConfigState(); + } + + public Builder(EnvironmentAddonsConfigState defaults) { + $ = new EnvironmentAddonsConfigState(Objects.requireNonNull(defaults)); + } + + /** + * @param analyticsEnabled Flag to enable/disable Analytics. + * + * @return builder + * + */ + public Builder analyticsEnabled(@Nullable Output analyticsEnabled) { + $.analyticsEnabled = analyticsEnabled; + return this; + } + + /** + * @param analyticsEnabled Flag to enable/disable Analytics. + * + * @return builder + * + */ + public Builder analyticsEnabled(Boolean analyticsEnabled) { + return analyticsEnabled(Output.of(analyticsEnabled)); + } + + /** + * @param envId The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + * @return builder + * + */ + public Builder envId(@Nullable Output envId) { + $.envId = envId; + return this; + } + + /** + * @param envId The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * *** + * + * @return builder + * + */ + public Builder envId(String envId) { + return envId(Output.of(envId)); + } + + public EnvironmentAddonsConfigState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java index 219d153517..9d672505ac 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java @@ -450,6 +450,21 @@ * .cleanupPolicyDryRun(false) * .cleanupPolicies( * RepositoryCleanupPolicyArgs.builder() + * .id("delete-untagged") + * .action("DELETE") + * .condition(RepositoryCleanupPolicyConditionArgs.builder() + * .tagState("UNTAGGED") + * .build()) + * .build(), + * RepositoryCleanupPolicyArgs.builder() + * .id("keep-new-untagged") + * .action("KEEP") + * .condition(RepositoryCleanupPolicyConditionArgs.builder() + * .tagState("UNTAGGED") + * .newerThan("7d") + * .build()) + * .build(), + * RepositoryCleanupPolicyArgs.builder() * .id("delete-prerelease") * .action("DELETE") * .condition(RepositoryCleanupPolicyConditionArgs.builder() @@ -457,7 +472,7 @@ * .tagPrefixes( * "alpha", * "v0") - * .olderThan("2592000s") + * .olderThan("30d") * .build()) * .build(), * RepositoryCleanupPolicyArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Connection.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Connection.java index 454517749e..33629fbdce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Connection.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Connection.java @@ -532,7 +532,7 @@ * var user = new User("user", UserArgs.builder() * .name("user") * .instance(instance.name()) - * .password("tf-test-my-password_77884") + * .password("tf-test-my-password_15222") * .build()); * * final var bqSa = BigqueryFunctions.getDefaultServiceAccount(); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Routine.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Routine.java index 54c48880c3..3dc1b160bd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Routine.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Routine.java @@ -428,7 +428,7 @@ * * public static void stack(Context ctx) { * var test = new Dataset("test", DatasetArgs.builder() - * .datasetId("tf_test_dataset_id_15222") + * .datasetId("tf_test_dataset_id_81126") * .build()); * * var customMaskingRoutine = new Routine("customMaskingRoutine", RoutineArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/ProjectInfo.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/ProjectInfo.java index 5749a4ed77..1b17566e7c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/ProjectInfo.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/ProjectInfo.java @@ -52,8 +52,8 @@ * * public static void stack(Context ctx) { * var project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test_81126") - * .name("tf-test_88717") + * .projectId("tf-test_88717") + * .name("tf-test_85794") * .orgId("123456789") * .deletionPolicy("DELETE") * .build()); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabel.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabel.java index 84e05f04aa..271bff724c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabel.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabel.java @@ -113,9 +113,9 @@ public Output createTime() { } /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -125,9 +125,9 @@ public Output createTime() { /** * @return Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabelArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabelArgs.java index 021ec1796c..7d2e63a37a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabelArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/DataAccessLabelArgs.java @@ -18,9 +18,9 @@ public final class DataAccessLabelArgs extends com.pulumi.resources.ResourceArgs /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -30,9 +30,9 @@ public final class DataAccessLabelArgs extends com.pulumi.resources.ResourceArgs /** * @return Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -149,9 +149,9 @@ public Builder(DataAccessLabelArgs defaults) { /** * @param dataAccessLabelId Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -165,9 +165,9 @@ public Builder dataAccessLabelId(Output dataAccessLabelId) { /** * @param dataAccessLabelId Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceList.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceList.java new file mode 100644 index 0000000000..d221c9726d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceList.java @@ -0,0 +1,359 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.chronicle.ReferenceListArgs; +import com.pulumi.gcp.chronicle.inputs.ReferenceListState; +import com.pulumi.gcp.chronicle.outputs.ReferenceListEntry; +import com.pulumi.gcp.chronicle.outputs.ReferenceListScopeInfo; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Chronicle Referencelist Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.chronicle.ReferenceList;
+ * import com.pulumi.gcp.chronicle.ReferenceListArgs;
+ * import com.pulumi.gcp.chronicle.inputs.ReferenceListEntryArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new ReferenceList("example", ReferenceListArgs.builder()
+ *             .location("us")
+ *             .instance("00000000-0000-0000-0000-000000000000")
+ *             .referenceListId("reference_list_id")
+ *             .description("referencelist-description")
+ *             .entries(ReferenceListEntryArgs.builder()
+ *                 .value("referencelist-entry-value")
+ *                 .build())
+ *             .syntaxType("REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * ReferenceList can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` + * + * * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` + * + * * `{{location}}/{{instance}}/{{reference_list_id}}` + * + * When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} + * ``` + * + */ +@ResourceType(type="gcp:chronicle/referenceList:ReferenceList") +public class ReferenceList extends com.pulumi.resources.CustomResource { + /** + * Required. A user-provided description of the reference list. + * + */ + @Export(name="description", refs={String.class}, tree="[0]") + private Output description; + + /** + * @return Required. A user-provided description of the reference list. + * + */ + public Output description() { + return this.description; + } + /** + * Output only. The unique display name of the reference list. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return Output only. The unique display name of the reference list. + * + */ + public Output displayName() { + return this.displayName; + } + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + @Export(name="entries", refs={List.class,ReferenceListEntry.class}, tree="[0,1]") + private Output> entries; + + /** + * @return Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + public Output> entries() { + return this.entries; + } + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Export(name="instance", refs={String.class}, tree="[0]") + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Output instance() { + return this.instance; + } + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + /** + * Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + */ + public Output name() { + return this.name; + } + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + public Output project() { + return this.project; + } + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + @Export(name="referenceListId", refs={String.class}, tree="[0]") + private Output referenceListId; + + /** + * @return Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + public Output referenceListId() { + return this.referenceListId; + } + /** + * Output only. The timestamp when the reference list was last updated. + * + */ + @Export(name="revisionCreateTime", refs={String.class}, tree="[0]") + private Output revisionCreateTime; + + /** + * @return Output only. The timestamp when the reference list was last updated. + * + */ + public Output revisionCreateTime() { + return this.revisionCreateTime; + } + /** + * Output only. The count of self-authored rules using the reference list. + * + */ + @Export(name="ruleAssociationsCount", refs={Integer.class}, tree="[0]") + private Output ruleAssociationsCount; + + /** + * @return Output only. The count of self-authored rules using the reference list. + * + */ + public Output ruleAssociationsCount() { + return this.ruleAssociationsCount; + } + /** + * Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + */ + @Export(name="rules", refs={List.class,String.class}, tree="[0,1]") + private Output> rules; + + /** + * @return Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + */ + public Output> rules() { + return this.rules; + } + /** + * ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + */ + @Export(name="scopeInfos", refs={List.class,ReferenceListScopeInfo.class}, tree="[0,1]") + private Output> scopeInfos; + + /** + * @return ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + */ + public Output> scopeInfos() { + return this.scopeInfos; + } + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + @Export(name="syntaxType", refs={String.class}, tree="[0]") + private Output syntaxType; + + /** + * @return Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + public Output syntaxType() { + return this.syntaxType; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ReferenceList(java.lang.String name) { + this(name, ReferenceListArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ReferenceList(java.lang.String name, ReferenceListArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public ReferenceList(java.lang.String name, ReferenceListArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/referenceList:ReferenceList", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private ReferenceList(java.lang.String name, Output id, @Nullable ReferenceListState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/referenceList:ReferenceList", name, state, makeResourceOptions(options, id), false); + } + + private static ReferenceListArgs makeArgs(ReferenceListArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ReferenceListArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static ReferenceList get(java.lang.String name, Output id, @Nullable ReferenceListState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ReferenceList(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceListArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceListArgs.java new file mode 100644 index 0000000000..a6cbeadf0b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/ReferenceListArgs.java @@ -0,0 +1,373 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.chronicle.inputs.ReferenceListEntryArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ReferenceListArgs extends com.pulumi.resources.ResourceArgs { + + public static final ReferenceListArgs Empty = new ReferenceListArgs(); + + /** + * Required. A user-provided description of the reference list. + * + */ + @Import(name="description", required=true) + private Output description; + + /** + * @return Required. A user-provided description of the reference list. + * + */ + public Output description() { + return this.description; + } + + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + @Import(name="entries", required=true) + private Output> entries; + + /** + * @return Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + public Output> entries() { + return this.entries; + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Import(name="instance", required=true) + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Output instance() { + return this.instance; + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + @Import(name="referenceListId", required=true) + private Output referenceListId; + + /** + * @return Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + public Output referenceListId() { + return this.referenceListId; + } + + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + @Import(name="syntaxType", required=true) + private Output syntaxType; + + /** + * @return Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + public Output syntaxType() { + return this.syntaxType; + } + + private ReferenceListArgs() {} + + private ReferenceListArgs(ReferenceListArgs $) { + this.description = $.description; + this.entries = $.entries; + this.instance = $.instance; + this.location = $.location; + this.project = $.project; + this.referenceListId = $.referenceListId; + this.syntaxType = $.syntaxType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ReferenceListArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ReferenceListArgs $; + + public Builder() { + $ = new ReferenceListArgs(); + } + + public Builder(ReferenceListArgs defaults) { + $ = new ReferenceListArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param description Required. A user-provided description of the reference list. + * + * @return builder + * + */ + public Builder description(Output description) { + $.description = description; + return this; + } + + /** + * @param description Required. A user-provided description of the reference list. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(Output> entries) { + $.entries = entries; + return this; + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(List entries) { + return entries(Output.of(entries)); + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(ReferenceListEntryArgs... entries) { + return entries(List.of(entries)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param referenceListId Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + * @return builder + * + */ + public Builder referenceListId(Output referenceListId) { + $.referenceListId = referenceListId; + return this; + } + + /** + * @param referenceListId Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + * @return builder + * + */ + public Builder referenceListId(String referenceListId) { + return referenceListId(Output.of(referenceListId)); + } + + /** + * @param syntaxType Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + * @return builder + * + */ + public Builder syntaxType(Output syntaxType) { + $.syntaxType = syntaxType; + return this; + } + + /** + * @param syntaxType Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + * @return builder + * + */ + public Builder syntaxType(String syntaxType) { + return syntaxType(Output.of(syntaxType)); + } + + public ReferenceListArgs build() { + if ($.description == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "description"); + } + if ($.entries == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "entries"); + } + if ($.instance == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "instance"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "location"); + } + if ($.referenceListId == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "referenceListId"); + } + if ($.syntaxType == null) { + throw new MissingRequiredPropertyException("ReferenceListArgs", "syntaxType"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/Rule.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/Rule.java new file mode 100644 index 0000000000..ebe16fb511 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/Rule.java @@ -0,0 +1,661 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.chronicle.RuleArgs; +import com.pulumi.gcp.chronicle.inputs.RuleState; +import com.pulumi.gcp.chronicle.outputs.RuleCompilationDiagnostic; +import com.pulumi.gcp.chronicle.outputs.RuleSeverity; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Chronicle Rule Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.chronicle.Rule;
+ * import com.pulumi.gcp.chronicle.RuleArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new Rule("example", RuleArgs.builder()
+ *             .location("us")
+ *             .instance("00000000-0000-0000-0000-000000000000")
+ *             .deletionPolicy("DEFAULT")
+ *             .text("""
+ * rule test_rule { meta: events:  $userid = $e.principal.user.userid  match: $userid over 10m condition: $e }
+ *             """)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Chronicle Rule With Force Deletion + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.chronicle.Rule;
+ * import com.pulumi.gcp.chronicle.RuleArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new Rule("example", RuleArgs.builder()
+ *             .location("us")
+ *             .instance("00000000-0000-0000-0000-000000000000")
+ *             .deletionPolicy("FORCE")
+ *             .text("""
+ * rule test_rule { meta: events:  $userid = $e.principal.user.userid  match: $userid over 10m condition: $e }
+ *             """)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Chronicle Rule With Data Access Scope + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.chronicle.DataAccessScope;
+ * import com.pulumi.gcp.chronicle.DataAccessScopeArgs;
+ * import com.pulumi.gcp.chronicle.inputs.DataAccessScopeAllowedDataAccessLabelArgs;
+ * import com.pulumi.gcp.chronicle.Rule;
+ * import com.pulumi.gcp.chronicle.RuleArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var dataAccessScopeTest = new DataAccessScope("dataAccessScopeTest", DataAccessScopeArgs.builder()
+ *             .location("us")
+ *             .instance("00000000-0000-0000-0000-000000000000")
+ *             .dataAccessScopeId("scope-name")
+ *             .description("scope-description")
+ *             .allowedDataAccessLabels(DataAccessScopeAllowedDataAccessLabelArgs.builder()
+ *                 .logType("GCP_CLOUDAUDIT")
+ *                 .build())
+ *             .build());
+ * 
+ *         var example = new Rule("example", RuleArgs.builder()
+ *             .location("us")
+ *             .instance("00000000-0000-0000-0000-000000000000")
+ *             .scope(googleChronicleDataAccessScope.dataAccessScopeTest().name())
+ *             .text("""
+ * rule test_rule { meta: events:  $userid = $e.principal.user.userid  match: $userid over 10m condition: $e }
+ *             """)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * Rule can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` + * + * * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` + * + * * `{{location}}/{{instance}}/{{rule_id}}` + * + * When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} + * ``` + * + */ +@ResourceType(type="gcp:chronicle/rule:Rule") +public class Rule extends com.pulumi.resources.CustomResource { + /** + * Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + */ + @Export(name="allowedRunFrequencies", refs={List.class,String.class}, tree="[0,1]") + private Output> allowedRunFrequencies; + + /** + * @return Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + */ + public Output> allowedRunFrequencies() { + return this.allowedRunFrequencies; + } + /** + * Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + */ + @Export(name="author", refs={String.class}, tree="[0]") + private Output author; + + /** + * @return Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + */ + public Output author() { + return this.author; + } + /** + * Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + */ + @Export(name="compilationDiagnostics", refs={List.class,RuleCompilationDiagnostic.class}, tree="[0,1]") + private Output> compilationDiagnostics; + + /** + * @return Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + */ + public Output> compilationDiagnostics() { + return this.compilationDiagnostics; + } + /** + * Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + */ + @Export(name="compilationState", refs={String.class}, tree="[0]") + private Output compilationState; + + /** + * @return Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + */ + public Output compilationState() { + return this.compilationState; + } + /** + * Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * Output only. Resource names of the data tables used in this rule. + * + */ + @Export(name="dataTables", refs={List.class,String.class}, tree="[0,1]") + private Output> dataTables; + + /** + * @return Output only. Resource names of the data tables used in this rule. + * + */ + public Output> dataTables() { + return this.dataTables; + } + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + @Export(name="deletionPolicy", refs={String.class}, tree="[0]") + private Output deletionPolicy; + + /** + * @return Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + public Output> deletionPolicy() { + return Codegen.optional(this.deletionPolicy); + } + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + public Output displayName() { + return this.displayName; + } + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + public Output etag() { + return this.etag; + } + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + @Export(name="instance", refs={String.class}, tree="[0]") + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + public Output instance() { + return this.instance; + } + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + /** + * Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + */ + @Export(name="metadata", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> metadata; + + /** + * @return Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + */ + public Output> metadata() { + return this.metadata; + } + /** + * Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Output name() { + return this.name; + } + /** + * Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + */ + @Export(name="nearRealTimeLiveRuleEligible", refs={Boolean.class}, tree="[0]") + private Output nearRealTimeLiveRuleEligible; + + /** + * @return Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + */ + public Output nearRealTimeLiveRuleEligible() { + return this.nearRealTimeLiveRuleEligible; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + */ + @Export(name="referenceLists", refs={List.class,String.class}, tree="[0,1]") + private Output> referenceLists; + + /** + * @return Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + */ + public Output> referenceLists() { + return this.referenceLists; + } + /** + * Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + */ + @Export(name="revisionCreateTime", refs={String.class}, tree="[0]") + private Output revisionCreateTime; + + /** + * @return Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + */ + public Output revisionCreateTime() { + return this.revisionCreateTime; + } + /** + * Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + */ + @Export(name="revisionId", refs={String.class}, tree="[0]") + private Output revisionId; + + /** + * @return Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + */ + public Output revisionId() { + return this.revisionId; + } + /** + * Rule Id is the ID of the Rule. + * + */ + @Export(name="ruleId", refs={String.class}, tree="[0]") + private Output ruleId; + + /** + * @return Rule Id is the ID of the Rule. + * + */ + public Output ruleId() { + return this.ruleId; + } + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + @Export(name="scope", refs={String.class}, tree="[0]") + private Output scope; + + /** + * @return Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + public Output> scope() { + return Codegen.optional(this.scope); + } + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + @Export(name="severities", refs={List.class,RuleSeverity.class}, tree="[0,1]") + private Output> severities; + + /** + * @return (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + public Output> severities() { + return this.severities; + } + /** + * The YARA-L content of the rule. + * Populated in FULL view. + * + */ + @Export(name="text", refs={String.class}, tree="[0]") + private Output text; + + /** + * @return The YARA-L content of the rule. + * Populated in FULL view. + * + */ + public Output> text() { + return Codegen.optional(this.text); + } + /** + * Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + */ + @Export(name="type", refs={String.class}, tree="[0]") + private Output type; + + /** + * @return Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + */ + public Output type() { + return this.type; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Rule(java.lang.String name) { + this(name, RuleArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Rule(java.lang.String name, RuleArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Rule(java.lang.String name, RuleArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/rule:Rule", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Rule(java.lang.String name, Output id, @Nullable RuleState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/rule:Rule", name, state, makeResourceOptions(options, id), false); + } + + private static RuleArgs makeArgs(RuleArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RuleArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Rule get(java.lang.String name, Output id, @Nullable RuleState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Rule(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleArgs.java new file mode 100644 index 0000000000..e1fee42adf --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleArgs.java @@ -0,0 +1,429 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuleArgs Empty = new RuleArgs(); + + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + @Import(name="deletionPolicy") + private @Nullable Output deletionPolicy; + + /** + * @return Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + public Optional> deletionPolicy() { + return Optional.ofNullable(this.deletionPolicy); + } + + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + @Import(name="instance", required=true) + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + public Output instance() { + return this.instance; + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Rule Id is the ID of the Rule. + * + */ + @Import(name="ruleId") + private @Nullable Output ruleId; + + /** + * @return Rule Id is the ID of the Rule. + * + */ + public Optional> ruleId() { + return Optional.ofNullable(this.ruleId); + } + + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + @Import(name="scope") + private @Nullable Output scope; + + /** + * @return Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + public Optional> scope() { + return Optional.ofNullable(this.scope); + } + + /** + * The YARA-L content of the rule. + * Populated in FULL view. + * + */ + @Import(name="text") + private @Nullable Output text; + + /** + * @return The YARA-L content of the rule. + * Populated in FULL view. + * + */ + public Optional> text() { + return Optional.ofNullable(this.text); + } + + private RuleArgs() {} + + private RuleArgs(RuleArgs $) { + this.deletionPolicy = $.deletionPolicy; + this.etag = $.etag; + this.instance = $.instance; + this.location = $.location; + this.project = $.project; + this.ruleId = $.ruleId; + this.scope = $.scope; + this.text = $.text; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleArgs $; + + public Builder() { + $ = new RuleArgs(); + } + + public Builder(RuleArgs defaults) { + $ = new RuleArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param deletionPolicy Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + * @return builder + * + */ + public Builder deletionPolicy(@Nullable Output deletionPolicy) { + $.deletionPolicy = deletionPolicy; + return this; + } + + /** + * @param deletionPolicy Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + * @return builder + * + */ + public Builder deletionPolicy(String deletionPolicy) { + return deletionPolicy(Output.of(deletionPolicy)); + } + + /** + * @param etag The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + * @return builder + * + */ + public Builder instance(Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param ruleId Rule Id is the ID of the Rule. + * + * @return builder + * + */ + public Builder ruleId(@Nullable Output ruleId) { + $.ruleId = ruleId; + return this; + } + + /** + * @param ruleId Rule Id is the ID of the Rule. + * + * @return builder + * + */ + public Builder ruleId(String ruleId) { + return ruleId(Output.of(ruleId)); + } + + /** + * @param scope Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + * @return builder + * + */ + public Builder scope(@Nullable Output scope) { + $.scope = scope; + return this; + } + + /** + * @param scope Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + * @return builder + * + */ + public Builder scope(String scope) { + return scope(Output.of(scope)); + } + + /** + * @param text The YARA-L content of the rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder text(@Nullable Output text) { + $.text = text; + return this; + } + + /** + * @param text The YARA-L content of the rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder text(String text) { + return text(Output.of(text)); + } + + public RuleArgs build() { + if ($.instance == null) { + throw new MissingRequiredPropertyException("RuleArgs", "instance"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("RuleArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeployment.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeployment.java new file mode 100644 index 0000000000..ad4c314de5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeployment.java @@ -0,0 +1,355 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.chronicle.RuleDeploymentArgs; +import com.pulumi.gcp.chronicle.inputs.RuleDeploymentState; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ## Import + * + * RuleDeployment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` + * + * * `{{project}}/{{location}}/{{instance}}/{{rule}}` + * + * * `{{location}}/{{instance}}/{{rule}}` + * + * When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} + * ``` + * + */ +@ResourceType(type="gcp:chronicle/ruleDeployment:RuleDeployment") +public class RuleDeployment extends com.pulumi.resources.CustomResource { + /** + * Whether detections resulting from this deployment should be considered + * alerts. + * + */ + @Export(name="alerting", refs={Boolean.class}, tree="[0]") + private Output alerting; + + /** + * @return Whether detections resulting from this deployment should be considered + * alerts. + * + */ + public Output> alerting() { + return Codegen.optional(this.alerting); + } + /** + * Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + */ + @Export(name="archiveTime", refs={String.class}, tree="[0]") + private Output archiveTime; + + /** + * @return Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + */ + public Output archiveTime() { + return this.archiveTime; + } + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + @Export(name="archived", refs={Boolean.class}, tree="[0]") + private Output archived; + + /** + * @return The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + public Output> archived() { + return Codegen.optional(this.archived); + } + /** + * Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Export(name="consumerRules", refs={List.class,String.class}, tree="[0,1]") + private Output> consumerRules; + + /** + * @return Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Output> consumerRules() { + return this.consumerRules; + } + /** + * Whether the rule is currently deployed continuously against incoming data. + * + */ + @Export(name="enabled", refs={Boolean.class}, tree="[0]") + private Output enabled; + + /** + * @return Whether the rule is currently deployed continuously against incoming data. + * + */ + public Output> enabled() { + return Codegen.optional(this.enabled); + } + /** + * The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + */ + @Export(name="executionState", refs={String.class}, tree="[0]") + private Output executionState; + + /** + * @return The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + */ + public Output executionState() { + return this.executionState; + } + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Export(name="instance", refs={String.class}, tree="[0]") + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Output instance() { + return this.instance; + } + /** + * Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + */ + @Export(name="lastAlertStatusChangeTime", refs={String.class}, tree="[0]") + private Output lastAlertStatusChangeTime; + + /** + * @return Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + */ + public Output lastAlertStatusChangeTime() { + return this.lastAlertStatusChangeTime; + } + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + /** + * The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + */ + public Output name() { + return this.name; + } + /** + * Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Export(name="producerRules", refs={List.class,String.class}, tree="[0,1]") + private Output> producerRules; + + /** + * @return Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Output> producerRules() { + return this.producerRules; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The Rule ID of the rule. + * + * *** + * + */ + @Export(name="rule", refs={String.class}, tree="[0]") + private Output rule; + + /** + * @return The Rule ID of the rule. + * + * *** + * + */ + public Output rule() { + return this.rule; + } + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + @Export(name="runFrequency", refs={String.class}, tree="[0]") + private Output runFrequency; + + /** + * @return The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + public Output> runFrequency() { + return Codegen.optional(this.runFrequency); + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RuleDeployment(java.lang.String name) { + this(name, RuleDeploymentArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RuleDeployment(java.lang.String name, RuleDeploymentArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RuleDeployment(java.lang.String name, RuleDeploymentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/ruleDeployment:RuleDeployment", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RuleDeployment(java.lang.String name, Output id, @Nullable RuleDeploymentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:chronicle/ruleDeployment:RuleDeployment", name, state, makeResourceOptions(options, id), false); + } + + private static RuleDeploymentArgs makeArgs(RuleDeploymentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RuleDeploymentArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RuleDeployment get(java.lang.String name, Output id, @Nullable RuleDeploymentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RuleDeployment(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeploymentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeploymentArgs.java new file mode 100644 index 0000000000..a3479c9fc9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/RuleDeploymentArgs.java @@ -0,0 +1,401 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleDeploymentArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuleDeploymentArgs Empty = new RuleDeploymentArgs(); + + /** + * Whether detections resulting from this deployment should be considered + * alerts. + * + */ + @Import(name="alerting") + private @Nullable Output alerting; + + /** + * @return Whether detections resulting from this deployment should be considered + * alerts. + * + */ + public Optional> alerting() { + return Optional.ofNullable(this.alerting); + } + + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + @Import(name="archived") + private @Nullable Output archived; + + /** + * @return The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + public Optional> archived() { + return Optional.ofNullable(this.archived); + } + + /** + * Whether the rule is currently deployed continuously against incoming data. + * + */ + @Import(name="enabled") + private @Nullable Output enabled; + + /** + * @return Whether the rule is currently deployed continuously against incoming data. + * + */ + public Optional> enabled() { + return Optional.ofNullable(this.enabled); + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Import(name="instance", required=true) + private Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Output instance() { + return this.instance; + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Output location() { + return this.location; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The Rule ID of the rule. + * + * *** + * + */ + @Import(name="rule", required=true) + private Output rule; + + /** + * @return The Rule ID of the rule. + * + * *** + * + */ + public Output rule() { + return this.rule; + } + + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + @Import(name="runFrequency") + private @Nullable Output runFrequency; + + /** + * @return The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + public Optional> runFrequency() { + return Optional.ofNullable(this.runFrequency); + } + + private RuleDeploymentArgs() {} + + private RuleDeploymentArgs(RuleDeploymentArgs $) { + this.alerting = $.alerting; + this.archived = $.archived; + this.enabled = $.enabled; + this.instance = $.instance; + this.location = $.location; + this.project = $.project; + this.rule = $.rule; + this.runFrequency = $.runFrequency; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleDeploymentArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleDeploymentArgs $; + + public Builder() { + $ = new RuleDeploymentArgs(); + } + + public Builder(RuleDeploymentArgs defaults) { + $ = new RuleDeploymentArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param alerting Whether detections resulting from this deployment should be considered + * alerts. + * + * @return builder + * + */ + public Builder alerting(@Nullable Output alerting) { + $.alerting = alerting; + return this; + } + + /** + * @param alerting Whether detections resulting from this deployment should be considered + * alerts. + * + * @return builder + * + */ + public Builder alerting(Boolean alerting) { + return alerting(Output.of(alerting)); + } + + /** + * @param archived The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + * @return builder + * + */ + public Builder archived(@Nullable Output archived) { + $.archived = archived; + return this; + } + + /** + * @param archived The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + * @return builder + * + */ + public Builder archived(Boolean archived) { + return archived(Output.of(archived)); + } + + /** + * @param enabled Whether the rule is currently deployed continuously against incoming data. + * + * @return builder + * + */ + public Builder enabled(@Nullable Output enabled) { + $.enabled = enabled; + return this; + } + + /** + * @param enabled Whether the rule is currently deployed continuously against incoming data. + * + * @return builder + * + */ + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param rule The Rule ID of the rule. + * + * *** + * + * @return builder + * + */ + public Builder rule(Output rule) { + $.rule = rule; + return this; + } + + /** + * @param rule The Rule ID of the rule. + * + * *** + * + * @return builder + * + */ + public Builder rule(String rule) { + return rule(Output.of(rule)); + } + + /** + * @param runFrequency The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + * @return builder + * + */ + public Builder runFrequency(@Nullable Output runFrequency) { + $.runFrequency = runFrequency; + return this; + } + + /** + * @param runFrequency The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + * @return builder + * + */ + public Builder runFrequency(String runFrequency) { + return runFrequency(Output.of(runFrequency)); + } + + public RuleDeploymentArgs build() { + if ($.instance == null) { + throw new MissingRequiredPropertyException("RuleDeploymentArgs", "instance"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("RuleDeploymentArgs", "location"); + } + if ($.rule == null) { + throw new MissingRequiredPropertyException("RuleDeploymentArgs", "rule"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/DataAccessLabelState.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/DataAccessLabelState.java index bd3a9e20f5..5f948f72e0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/DataAccessLabelState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/DataAccessLabelState.java @@ -47,9 +47,9 @@ public Optional> createTime() { /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -59,9 +59,9 @@ public Optional> createTime() { /** * @return Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -290,9 +290,9 @@ public Builder createTime(String createTime) { /** * @param dataAccessLabelId Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * @@ -306,9 +306,9 @@ public Builder dataAccessLabelId(@Nullable Output dataAccessLabelId) { /** * @param dataAccessLabelId Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * *** * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListEntryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListEntryArgs.java new file mode 100644 index 0000000000..8fb4d4c950 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListEntryArgs.java @@ -0,0 +1,93 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class ReferenceListEntryArgs extends com.pulumi.resources.ResourceArgs { + + public static final ReferenceListEntryArgs Empty = new ReferenceListEntryArgs(); + + /** + * Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + */ + @Import(name="value", required=true) + private Output value; + + /** + * @return Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + */ + public Output value() { + return this.value; + } + + private ReferenceListEntryArgs() {} + + private ReferenceListEntryArgs(ReferenceListEntryArgs $) { + this.value = $.value; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ReferenceListEntryArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ReferenceListEntryArgs $; + + public Builder() { + $ = new ReferenceListEntryArgs(); + } + + public Builder(ReferenceListEntryArgs defaults) { + $ = new ReferenceListEntryArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param value Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + * @return builder + * + */ + public Builder value(Output value) { + $.value = value; + return this; + } + + /** + * @param value Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + * @return builder + * + */ + public Builder value(String value) { + return value(Output.of(value)); + } + + public ReferenceListEntryArgs build() { + if ($.value == null) { + throw new MissingRequiredPropertyException("ReferenceListEntryArgs", "value"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoArgs.java new file mode 100644 index 0000000000..2227a313ed --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoArgs.java @@ -0,0 +1,89 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.chronicle.inputs.ReferenceListScopeInfoReferenceListScopeArgs; +import java.util.Objects; + + +public final class ReferenceListScopeInfoArgs extends com.pulumi.resources.ResourceArgs { + + public static final ReferenceListScopeInfoArgs Empty = new ReferenceListScopeInfoArgs(); + + /** + * ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + */ + @Import(name="referenceListScope", required=true) + private Output referenceListScope; + + /** + * @return ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + */ + public Output referenceListScope() { + return this.referenceListScope; + } + + private ReferenceListScopeInfoArgs() {} + + private ReferenceListScopeInfoArgs(ReferenceListScopeInfoArgs $) { + this.referenceListScope = $.referenceListScope; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ReferenceListScopeInfoArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ReferenceListScopeInfoArgs $; + + public Builder() { + $ = new ReferenceListScopeInfoArgs(); + } + + public Builder(ReferenceListScopeInfoArgs defaults) { + $ = new ReferenceListScopeInfoArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param referenceListScope ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + * @return builder + * + */ + public Builder referenceListScope(Output referenceListScope) { + $.referenceListScope = referenceListScope; + return this; + } + + /** + * @param referenceListScope ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + * @return builder + * + */ + public Builder referenceListScope(ReferenceListScopeInfoReferenceListScopeArgs referenceListScope) { + return referenceListScope(Output.of(referenceListScope)); + } + + public ReferenceListScopeInfoArgs build() { + if ($.referenceListScope == null) { + throw new MissingRequiredPropertyException("ReferenceListScopeInfoArgs", "referenceListScope"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoReferenceListScopeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoReferenceListScopeArgs.java new file mode 100644 index 0000000000..64cdad95c9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListScopeInfoReferenceListScopeArgs.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ReferenceListScopeInfoReferenceListScopeArgs extends com.pulumi.resources.ResourceArgs { + + public static final ReferenceListScopeInfoReferenceListScopeArgs Empty = new ReferenceListScopeInfoReferenceListScopeArgs(); + + /** + * Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + */ + @Import(name="scopeNames") + private @Nullable Output> scopeNames; + + /** + * @return Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + */ + public Optional>> scopeNames() { + return Optional.ofNullable(this.scopeNames); + } + + private ReferenceListScopeInfoReferenceListScopeArgs() {} + + private ReferenceListScopeInfoReferenceListScopeArgs(ReferenceListScopeInfoReferenceListScopeArgs $) { + this.scopeNames = $.scopeNames; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ReferenceListScopeInfoReferenceListScopeArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ReferenceListScopeInfoReferenceListScopeArgs $; + + public Builder() { + $ = new ReferenceListScopeInfoReferenceListScopeArgs(); + } + + public Builder(ReferenceListScopeInfoReferenceListScopeArgs defaults) { + $ = new ReferenceListScopeInfoReferenceListScopeArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param scopeNames Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + * @return builder + * + */ + public Builder scopeNames(@Nullable Output> scopeNames) { + $.scopeNames = scopeNames; + return this; + } + + /** + * @param scopeNames Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + * @return builder + * + */ + public Builder scopeNames(List scopeNames) { + return scopeNames(Output.of(scopeNames)); + } + + /** + * @param scopeNames Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + * @return builder + * + */ + public Builder scopeNames(String... scopeNames) { + return scopeNames(List.of(scopeNames)); + } + + public ReferenceListScopeInfoReferenceListScopeArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListState.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListState.java new file mode 100644 index 0000000000..b4d4123d98 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/ReferenceListState.java @@ -0,0 +1,621 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.chronicle.inputs.ReferenceListEntryArgs; +import com.pulumi.gcp.chronicle.inputs.ReferenceListScopeInfoArgs; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ReferenceListState extends com.pulumi.resources.ResourceArgs { + + public static final ReferenceListState Empty = new ReferenceListState(); + + /** + * Required. A user-provided description of the reference list. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Required. A user-provided description of the reference list. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Output only. The unique display name of the reference list. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Output only. The unique display name of the reference list. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + @Import(name="entries") + private @Nullable Output> entries; + + /** + * @return Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + */ + public Optional>> entries() { + return Optional.ofNullable(this.entries); + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Import(name="instance") + private @Nullable Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Optional> instance() { + return Optional.ofNullable(this.instance); + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + @Import(name="referenceListId") + private @Nullable Output referenceListId; + + /** + * @return Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + */ + public Optional> referenceListId() { + return Optional.ofNullable(this.referenceListId); + } + + /** + * Output only. The timestamp when the reference list was last updated. + * + */ + @Import(name="revisionCreateTime") + private @Nullable Output revisionCreateTime; + + /** + * @return Output only. The timestamp when the reference list was last updated. + * + */ + public Optional> revisionCreateTime() { + return Optional.ofNullable(this.revisionCreateTime); + } + + /** + * Output only. The count of self-authored rules using the reference list. + * + */ + @Import(name="ruleAssociationsCount") + private @Nullable Output ruleAssociationsCount; + + /** + * @return Output only. The count of self-authored rules using the reference list. + * + */ + public Optional> ruleAssociationsCount() { + return Optional.ofNullable(this.ruleAssociationsCount); + } + + /** + * Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + */ + @Import(name="rules") + private @Nullable Output> rules; + + /** + * @return Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + */ + public Optional>> rules() { + return Optional.ofNullable(this.rules); + } + + /** + * ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + */ + @Import(name="scopeInfos") + private @Nullable Output> scopeInfos; + + /** + * @return ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + */ + public Optional>> scopeInfos() { + return Optional.ofNullable(this.scopeInfos); + } + + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + @Import(name="syntaxType") + private @Nullable Output syntaxType; + + /** + * @return Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + */ + public Optional> syntaxType() { + return Optional.ofNullable(this.syntaxType); + } + + private ReferenceListState() {} + + private ReferenceListState(ReferenceListState $) { + this.description = $.description; + this.displayName = $.displayName; + this.entries = $.entries; + this.instance = $.instance; + this.location = $.location; + this.name = $.name; + this.project = $.project; + this.referenceListId = $.referenceListId; + this.revisionCreateTime = $.revisionCreateTime; + this.ruleAssociationsCount = $.ruleAssociationsCount; + this.rules = $.rules; + this.scopeInfos = $.scopeInfos; + this.syntaxType = $.syntaxType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ReferenceListState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ReferenceListState $; + + public Builder() { + $ = new ReferenceListState(); + } + + public Builder(ReferenceListState defaults) { + $ = new ReferenceListState(Objects.requireNonNull(defaults)); + } + + /** + * @param description Required. A user-provided description of the reference list. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Required. A user-provided description of the reference list. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param displayName Output only. The unique display name of the reference list. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Output only. The unique display name of the reference list. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(@Nullable Output> entries) { + $.entries = entries; + return this; + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(List entries) { + return entries(Output.of(entries)); + } + + /** + * @param entries Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + * + * @return builder + * + */ + public Builder entries(ReferenceListEntryArgs... entries) { + return entries(List.of(entries)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(@Nullable Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param referenceListId Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + * @return builder + * + */ + public Builder referenceListId(@Nullable Output referenceListId) { + $.referenceListId = referenceListId; + return this; + } + + /** + * @param referenceListId Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + * + * @return builder + * + */ + public Builder referenceListId(String referenceListId) { + return referenceListId(Output.of(referenceListId)); + } + + /** + * @param revisionCreateTime Output only. The timestamp when the reference list was last updated. + * + * @return builder + * + */ + public Builder revisionCreateTime(@Nullable Output revisionCreateTime) { + $.revisionCreateTime = revisionCreateTime; + return this; + } + + /** + * @param revisionCreateTime Output only. The timestamp when the reference list was last updated. + * + * @return builder + * + */ + public Builder revisionCreateTime(String revisionCreateTime) { + return revisionCreateTime(Output.of(revisionCreateTime)); + } + + /** + * @param ruleAssociationsCount Output only. The count of self-authored rules using the reference list. + * + * @return builder + * + */ + public Builder ruleAssociationsCount(@Nullable Output ruleAssociationsCount) { + $.ruleAssociationsCount = ruleAssociationsCount; + return this; + } + + /** + * @param ruleAssociationsCount Output only. The count of self-authored rules using the reference list. + * + * @return builder + * + */ + public Builder ruleAssociationsCount(Integer ruleAssociationsCount) { + return ruleAssociationsCount(Output.of(ruleAssociationsCount)); + } + + /** + * @param rules Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + * @return builder + * + */ + public Builder rules(@Nullable Output> rules) { + $.rules = rules; + return this; + } + + /** + * @param rules Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + * @return builder + * + */ + public Builder rules(List rules) { + return rules(Output.of(rules)); + } + + /** + * @param rules Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * + * @return builder + * + */ + public Builder rules(String... rules) { + return rules(List.of(rules)); + } + + /** + * @param scopeInfos ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + * @return builder + * + */ + public Builder scopeInfos(@Nullable Output> scopeInfos) { + $.scopeInfos = scopeInfos; + return this; + } + + /** + * @param scopeInfos ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + * @return builder + * + */ + public Builder scopeInfos(List scopeInfos) { + return scopeInfos(Output.of(scopeInfos)); + } + + /** + * @param scopeInfos ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + * + * @return builder + * + */ + public Builder scopeInfos(ReferenceListScopeInfoArgs... scopeInfos) { + return scopeInfos(List.of(scopeInfos)); + } + + /** + * @param syntaxType Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + * @return builder + * + */ + public Builder syntaxType(@Nullable Output syntaxType) { + $.syntaxType = syntaxType; + return this; + } + + /** + * @param syntaxType Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + * + * @return builder + * + */ + public Builder syntaxType(String syntaxType) { + return syntaxType(Output.of(syntaxType)); + } + + public ReferenceListState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticArgs.java new file mode 100644 index 0000000000..fc10ef89b9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticArgs.java @@ -0,0 +1,231 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.chronicle.inputs.RuleCompilationDiagnosticPositionArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleCompilationDiagnosticArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuleCompilationDiagnosticArgs Empty = new RuleCompilationDiagnosticArgs(); + + /** + * (Output) + * Output only. The diagnostic message. + * + */ + @Import(name="message") + private @Nullable Output message; + + /** + * @return (Output) + * Output only. The diagnostic message. + * + */ + public Optional> message() { + return Optional.ofNullable(this.message); + } + + /** + * CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + */ + @Import(name="position") + private @Nullable Output position; + + /** + * @return CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + */ + public Optional> position() { + return Optional.ofNullable(this.position); + } + + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + @Import(name="severity") + private @Nullable Output severity; + + /** + * @return (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + public Optional> severity() { + return Optional.ofNullable(this.severity); + } + + /** + * (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + */ + @Import(name="uri") + private @Nullable Output uri; + + /** + * @return (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + */ + public Optional> uri() { + return Optional.ofNullable(this.uri); + } + + private RuleCompilationDiagnosticArgs() {} + + private RuleCompilationDiagnosticArgs(RuleCompilationDiagnosticArgs $) { + this.message = $.message; + this.position = $.position; + this.severity = $.severity; + this.uri = $.uri; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleCompilationDiagnosticArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleCompilationDiagnosticArgs $; + + public Builder() { + $ = new RuleCompilationDiagnosticArgs(); + } + + public Builder(RuleCompilationDiagnosticArgs defaults) { + $ = new RuleCompilationDiagnosticArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param message (Output) + * Output only. The diagnostic message. + * + * @return builder + * + */ + public Builder message(@Nullable Output message) { + $.message = message; + return this; + } + + /** + * @param message (Output) + * Output only. The diagnostic message. + * + * @return builder + * + */ + public Builder message(String message) { + return message(Output.of(message)); + } + + /** + * @param position CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + * @return builder + * + */ + public Builder position(@Nullable Output position) { + $.position = position; + return this; + } + + /** + * @param position CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + * @return builder + * + */ + public Builder position(RuleCompilationDiagnosticPositionArgs position) { + return position(Output.of(position)); + } + + /** + * @param severity (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + * @return builder + * + */ + public Builder severity(@Nullable Output severity) { + $.severity = severity; + return this; + } + + /** + * @param severity (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + * @return builder + * + */ + public Builder severity(String severity) { + return severity(Output.of(severity)); + } + + /** + * @param uri (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + * @return builder + * + */ + public Builder uri(@Nullable Output uri) { + $.uri = uri; + return this; + } + + /** + * @param uri (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + * @return builder + * + */ + public Builder uri(String uri) { + return uri(Output.of(uri)); + } + + public RuleCompilationDiagnosticArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticPositionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticPositionArgs.java new file mode 100644 index 0000000000..cef70146f5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleCompilationDiagnosticPositionArgs.java @@ -0,0 +1,210 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleCompilationDiagnosticPositionArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuleCompilationDiagnosticPositionArgs Empty = new RuleCompilationDiagnosticPositionArgs(); + + /** + * (Output) + * Output only. End column number, beginning at 1. + * + */ + @Import(name="endColumn") + private @Nullable Output endColumn; + + /** + * @return (Output) + * Output only. End column number, beginning at 1. + * + */ + public Optional> endColumn() { + return Optional.ofNullable(this.endColumn); + } + + /** + * (Output) + * Output only. End line number, beginning at 1. + * + */ + @Import(name="endLine") + private @Nullable Output endLine; + + /** + * @return (Output) + * Output only. End line number, beginning at 1. + * + */ + public Optional> endLine() { + return Optional.ofNullable(this.endLine); + } + + /** + * (Output) + * Output only. Start column number, beginning at 1. + * + */ + @Import(name="startColumn") + private @Nullable Output startColumn; + + /** + * @return (Output) + * Output only. Start column number, beginning at 1. + * + */ + public Optional> startColumn() { + return Optional.ofNullable(this.startColumn); + } + + /** + * (Output) + * Output only. Start line number, beginning at 1. + * + */ + @Import(name="startLine") + private @Nullable Output startLine; + + /** + * @return (Output) + * Output only. Start line number, beginning at 1. + * + */ + public Optional> startLine() { + return Optional.ofNullable(this.startLine); + } + + private RuleCompilationDiagnosticPositionArgs() {} + + private RuleCompilationDiagnosticPositionArgs(RuleCompilationDiagnosticPositionArgs $) { + this.endColumn = $.endColumn; + this.endLine = $.endLine; + this.startColumn = $.startColumn; + this.startLine = $.startLine; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleCompilationDiagnosticPositionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleCompilationDiagnosticPositionArgs $; + + public Builder() { + $ = new RuleCompilationDiagnosticPositionArgs(); + } + + public Builder(RuleCompilationDiagnosticPositionArgs defaults) { + $ = new RuleCompilationDiagnosticPositionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param endColumn (Output) + * Output only. End column number, beginning at 1. + * + * @return builder + * + */ + public Builder endColumn(@Nullable Output endColumn) { + $.endColumn = endColumn; + return this; + } + + /** + * @param endColumn (Output) + * Output only. End column number, beginning at 1. + * + * @return builder + * + */ + public Builder endColumn(Integer endColumn) { + return endColumn(Output.of(endColumn)); + } + + /** + * @param endLine (Output) + * Output only. End line number, beginning at 1. + * + * @return builder + * + */ + public Builder endLine(@Nullable Output endLine) { + $.endLine = endLine; + return this; + } + + /** + * @param endLine (Output) + * Output only. End line number, beginning at 1. + * + * @return builder + * + */ + public Builder endLine(Integer endLine) { + return endLine(Output.of(endLine)); + } + + /** + * @param startColumn (Output) + * Output only. Start column number, beginning at 1. + * + * @return builder + * + */ + public Builder startColumn(@Nullable Output startColumn) { + $.startColumn = startColumn; + return this; + } + + /** + * @param startColumn (Output) + * Output only. Start column number, beginning at 1. + * + * @return builder + * + */ + public Builder startColumn(Integer startColumn) { + return startColumn(Output.of(startColumn)); + } + + /** + * @param startLine (Output) + * Output only. Start line number, beginning at 1. + * + * @return builder + * + */ + public Builder startLine(@Nullable Output startLine) { + $.startLine = startLine; + return this; + } + + /** + * @param startLine (Output) + * Output only. Start line number, beginning at 1. + * + * @return builder + * + */ + public Builder startLine(Integer startLine) { + return startLine(Output.of(startLine)); + } + + public RuleCompilationDiagnosticPositionArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleDeploymentState.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleDeploymentState.java new file mode 100644 index 0000000000..440c38eb88 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleDeploymentState.java @@ -0,0 +1,700 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleDeploymentState extends com.pulumi.resources.ResourceArgs { + + public static final RuleDeploymentState Empty = new RuleDeploymentState(); + + /** + * Whether detections resulting from this deployment should be considered + * alerts. + * + */ + @Import(name="alerting") + private @Nullable Output alerting; + + /** + * @return Whether detections resulting from this deployment should be considered + * alerts. + * + */ + public Optional> alerting() { + return Optional.ofNullable(this.alerting); + } + + /** + * Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + */ + @Import(name="archiveTime") + private @Nullable Output archiveTime; + + /** + * @return Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + */ + public Optional> archiveTime() { + return Optional.ofNullable(this.archiveTime); + } + + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + @Import(name="archived") + private @Nullable Output archived; + + /** + * @return The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + */ + public Optional> archived() { + return Optional.ofNullable(this.archived); + } + + /** + * Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Import(name="consumerRules") + private @Nullable Output> consumerRules; + + /** + * @return Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Optional>> consumerRules() { + return Optional.ofNullable(this.consumerRules); + } + + /** + * Whether the rule is currently deployed continuously against incoming data. + * + */ + @Import(name="enabled") + private @Nullable Output enabled; + + /** + * @return Whether the rule is currently deployed continuously against incoming data. + * + */ + public Optional> enabled() { + return Optional.ofNullable(this.enabled); + } + + /** + * The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + */ + @Import(name="executionState") + private @Nullable Output executionState; + + /** + * @return The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + */ + public Optional> executionState() { + return Optional.ofNullable(this.executionState); + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + @Import(name="instance") + private @Nullable Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + */ + public Optional> instance() { + return Optional.ofNullable(this.instance); + } + + /** + * Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + */ + @Import(name="lastAlertStatusChangeTime") + private @Nullable Output lastAlertStatusChangeTime; + + /** + * @return Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + */ + public Optional> lastAlertStatusChangeTime() { + return Optional.ofNullable(this.lastAlertStatusChangeTime); + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Import(name="producerRules") + private @Nullable Output> producerRules; + + /** + * @return Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Optional>> producerRules() { + return Optional.ofNullable(this.producerRules); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The Rule ID of the rule. + * + * *** + * + */ + @Import(name="rule") + private @Nullable Output rule; + + /** + * @return The Rule ID of the rule. + * + * *** + * + */ + public Optional> rule() { + return Optional.ofNullable(this.rule); + } + + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + @Import(name="runFrequency") + private @Nullable Output runFrequency; + + /** + * @return The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + */ + public Optional> runFrequency() { + return Optional.ofNullable(this.runFrequency); + } + + private RuleDeploymentState() {} + + private RuleDeploymentState(RuleDeploymentState $) { + this.alerting = $.alerting; + this.archiveTime = $.archiveTime; + this.archived = $.archived; + this.consumerRules = $.consumerRules; + this.enabled = $.enabled; + this.executionState = $.executionState; + this.instance = $.instance; + this.lastAlertStatusChangeTime = $.lastAlertStatusChangeTime; + this.location = $.location; + this.name = $.name; + this.producerRules = $.producerRules; + this.project = $.project; + this.rule = $.rule; + this.runFrequency = $.runFrequency; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleDeploymentState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleDeploymentState $; + + public Builder() { + $ = new RuleDeploymentState(); + } + + public Builder(RuleDeploymentState defaults) { + $ = new RuleDeploymentState(Objects.requireNonNull(defaults)); + } + + /** + * @param alerting Whether detections resulting from this deployment should be considered + * alerts. + * + * @return builder + * + */ + public Builder alerting(@Nullable Output alerting) { + $.alerting = alerting; + return this; + } + + /** + * @param alerting Whether detections resulting from this deployment should be considered + * alerts. + * + * @return builder + * + */ + public Builder alerting(Boolean alerting) { + return alerting(Output.of(alerting)); + } + + /** + * @param archiveTime Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + * @return builder + * + */ + public Builder archiveTime(@Nullable Output archiveTime) { + $.archiveTime = archiveTime; + return this; + } + + /** + * @param archiveTime Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + * + * @return builder + * + */ + public Builder archiveTime(String archiveTime) { + return archiveTime(Output.of(archiveTime)); + } + + /** + * @param archived The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + * @return builder + * + */ + public Builder archived(@Nullable Output archived) { + $.archived = archived; + return this; + } + + /** + * @param archived The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and run_frequency cannot be + * updated. + * + * @return builder + * + */ + public Builder archived(Boolean archived) { + return archived(Output.of(archived)); + } + + /** + * @param consumerRules Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder consumerRules(@Nullable Output> consumerRules) { + $.consumerRules = consumerRules; + return this; + } + + /** + * @param consumerRules Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder consumerRules(List consumerRules) { + return consumerRules(Output.of(consumerRules)); + } + + /** + * @param consumerRules Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder consumerRules(String... consumerRules) { + return consumerRules(List.of(consumerRules)); + } + + /** + * @param enabled Whether the rule is currently deployed continuously against incoming data. + * + * @return builder + * + */ + public Builder enabled(@Nullable Output enabled) { + $.enabled = enabled; + return this; + } + + /** + * @param enabled Whether the rule is currently deployed continuously against incoming data. + * + * @return builder + * + */ + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + /** + * @param executionState The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + * @return builder + * + */ + public Builder executionState(@Nullable Output executionState) { + $.executionState = executionState; + return this; + } + + /** + * @param executionState The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + * + * @return builder + * + */ + public Builder executionState(String executionState) { + return executionState(Output.of(executionState)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(@Nullable Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param lastAlertStatusChangeTime Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + * @return builder + * + */ + public Builder lastAlertStatusChangeTime(@Nullable Output lastAlertStatusChangeTime) { + $.lastAlertStatusChangeTime = lastAlertStatusChangeTime; + return this; + } + + /** + * @param lastAlertStatusChangeTime Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + * + * @return builder + * + */ + public Builder lastAlertStatusChangeTime(String lastAlertStatusChangeTime) { + return lastAlertStatusChangeTime(Output.of(lastAlertStatusChangeTime)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param producerRules Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder producerRules(@Nullable Output> producerRules) { + $.producerRules = producerRules; + return this; + } + + /** + * @param producerRules Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder producerRules(List producerRules) { + return producerRules(Output.of(producerRules)); + } + + /** + * @param producerRules Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder producerRules(String... producerRules) { + return producerRules(List.of(producerRules)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param rule The Rule ID of the rule. + * + * *** + * + * @return builder + * + */ + public Builder rule(@Nullable Output rule) { + $.rule = rule; + return this; + } + + /** + * @param rule The Rule ID of the rule. + * + * *** + * + * @return builder + * + */ + public Builder rule(String rule) { + return rule(Output.of(rule)); + } + + /** + * @param runFrequency The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + * @return builder + * + */ + public Builder runFrequency(@Nullable Output runFrequency) { + $.runFrequency = runFrequency; + return this; + } + + /** + * @param runFrequency The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + * + * @return builder + * + */ + public Builder runFrequency(String runFrequency) { + return runFrequency(Output.of(runFrequency)); + } + + public RuleDeploymentState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleSeverityArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleSeverityArgs.java new file mode 100644 index 0000000000..3dba089328 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleSeverityArgs.java @@ -0,0 +1,87 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleSeverityArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuleSeverityArgs Empty = new RuleSeverityArgs(); + + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + private RuleSeverityArgs() {} + + private RuleSeverityArgs(RuleSeverityArgs $) { + this.displayName = $.displayName; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleSeverityArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleSeverityArgs $; + + public Builder() { + $ = new RuleSeverityArgs(); + } + + public Builder(RuleSeverityArgs defaults) { + $ = new RuleSeverityArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param displayName The display name of the severity level. Extracted from the meta section of + * the rule text. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The display name of the severity level. Extracted from the meta section of + * the rule text. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + public RuleSeverityArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleState.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleState.java new file mode 100644 index 0000000000..3f06413574 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/inputs/RuleState.java @@ -0,0 +1,1162 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.chronicle.inputs.RuleCompilationDiagnosticArgs; +import com.pulumi.gcp.chronicle.inputs.RuleSeverityArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuleState extends com.pulumi.resources.ResourceArgs { + + public static final RuleState Empty = new RuleState(); + + /** + * Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + */ + @Import(name="allowedRunFrequencies") + private @Nullable Output> allowedRunFrequencies; + + /** + * @return Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + */ + public Optional>> allowedRunFrequencies() { + return Optional.ofNullable(this.allowedRunFrequencies); + } + + /** + * Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + */ + @Import(name="author") + private @Nullable Output author; + + /** + * @return Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + */ + public Optional> author() { + return Optional.ofNullable(this.author); + } + + /** + * Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + */ + @Import(name="compilationDiagnostics") + private @Nullable Output> compilationDiagnostics; + + /** + * @return Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + */ + public Optional>> compilationDiagnostics() { + return Optional.ofNullable(this.compilationDiagnostics); + } + + /** + * Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + */ + @Import(name="compilationState") + private @Nullable Output compilationState; + + /** + * @return Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + */ + public Optional> compilationState() { + return Optional.ofNullable(this.compilationState); + } + + /** + * Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * Output only. Resource names of the data tables used in this rule. + * + */ + @Import(name="dataTables") + private @Nullable Output> dataTables; + + /** + * @return Output only. Resource names of the data tables used in this rule. + * + */ + public Optional>> dataTables() { + return Optional.ofNullable(this.dataTables); + } + + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + @Import(name="deletionPolicy") + private @Nullable Output deletionPolicy; + + /** + * @return Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + */ + public Optional> deletionPolicy() { + return Optional.ofNullable(this.deletionPolicy); + } + + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + @Import(name="instance") + private @Nullable Output instance; + + /** + * @return The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + */ + public Optional> instance() { + return Optional.ofNullable(this.instance); + } + + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + */ + @Import(name="metadata") + private @Nullable Output> metadata; + + /** + * @return Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + */ + public Optional>> metadata() { + return Optional.ofNullable(this.metadata); + } + + /** + * Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + */ + @Import(name="nearRealTimeLiveRuleEligible") + private @Nullable Output nearRealTimeLiveRuleEligible; + + /** + * @return Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + */ + public Optional> nearRealTimeLiveRuleEligible() { + return Optional.ofNullable(this.nearRealTimeLiveRuleEligible); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + */ + @Import(name="referenceLists") + private @Nullable Output> referenceLists; + + /** + * @return Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + */ + public Optional>> referenceLists() { + return Optional.ofNullable(this.referenceLists); + } + + /** + * Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + */ + @Import(name="revisionCreateTime") + private @Nullable Output revisionCreateTime; + + /** + * @return Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + */ + public Optional> revisionCreateTime() { + return Optional.ofNullable(this.revisionCreateTime); + } + + /** + * Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + */ + @Import(name="revisionId") + private @Nullable Output revisionId; + + /** + * @return Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + */ + public Optional> revisionId() { + return Optional.ofNullable(this.revisionId); + } + + /** + * Rule Id is the ID of the Rule. + * + */ + @Import(name="ruleId") + private @Nullable Output ruleId; + + /** + * @return Rule Id is the ID of the Rule. + * + */ + public Optional> ruleId() { + return Optional.ofNullable(this.ruleId); + } + + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + @Import(name="scope") + private @Nullable Output scope; + + /** + * @return Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + */ + public Optional> scope() { + return Optional.ofNullable(this.scope); + } + + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + @Import(name="severities") + private @Nullable Output> severities; + + /** + * @return (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + public Optional>> severities() { + return Optional.ofNullable(this.severities); + } + + /** + * The YARA-L content of the rule. + * Populated in FULL view. + * + */ + @Import(name="text") + private @Nullable Output text; + + /** + * @return The YARA-L content of the rule. + * Populated in FULL view. + * + */ + public Optional> text() { + return Optional.ofNullable(this.text); + } + + /** + * Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + private RuleState() {} + + private RuleState(RuleState $) { + this.allowedRunFrequencies = $.allowedRunFrequencies; + this.author = $.author; + this.compilationDiagnostics = $.compilationDiagnostics; + this.compilationState = $.compilationState; + this.createTime = $.createTime; + this.dataTables = $.dataTables; + this.deletionPolicy = $.deletionPolicy; + this.displayName = $.displayName; + this.etag = $.etag; + this.instance = $.instance; + this.location = $.location; + this.metadata = $.metadata; + this.name = $.name; + this.nearRealTimeLiveRuleEligible = $.nearRealTimeLiveRuleEligible; + this.project = $.project; + this.referenceLists = $.referenceLists; + this.revisionCreateTime = $.revisionCreateTime; + this.revisionId = $.revisionId; + this.ruleId = $.ruleId; + this.scope = $.scope; + this.severities = $.severities; + this.text = $.text; + this.type = $.type; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuleState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuleState $; + + public Builder() { + $ = new RuleState(); + } + + public Builder(RuleState defaults) { + $ = new RuleState(Objects.requireNonNull(defaults)); + } + + /** + * @param allowedRunFrequencies Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder allowedRunFrequencies(@Nullable Output> allowedRunFrequencies) { + $.allowedRunFrequencies = allowedRunFrequencies; + return this; + } + + /** + * @param allowedRunFrequencies Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder allowedRunFrequencies(List allowedRunFrequencies) { + return allowedRunFrequencies(Output.of(allowedRunFrequencies)); + } + + /** + * @param allowedRunFrequencies Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder allowedRunFrequencies(String... allowedRunFrequencies) { + return allowedRunFrequencies(List.of(allowedRunFrequencies)); + } + + /** + * @param author Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder author(@Nullable Output author) { + $.author = author; + return this; + } + + /** + * @param author Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder author(String author) { + return author(Output.of(author)); + } + + /** + * @param compilationDiagnostics Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + * @return builder + * + */ + public Builder compilationDiagnostics(@Nullable Output> compilationDiagnostics) { + $.compilationDiagnostics = compilationDiagnostics; + return this; + } + + /** + * @param compilationDiagnostics Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + * @return builder + * + */ + public Builder compilationDiagnostics(List compilationDiagnostics) { + return compilationDiagnostics(Output.of(compilationDiagnostics)); + } + + /** + * @param compilationDiagnostics Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + * + * @return builder + * + */ + public Builder compilationDiagnostics(RuleCompilationDiagnosticArgs... compilationDiagnostics) { + return compilationDiagnostics(List.of(compilationDiagnostics)); + } + + /** + * @param compilationState Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + * @return builder + * + */ + public Builder compilationState(@Nullable Output compilationState) { + $.compilationState = compilationState; + return this; + } + + /** + * @param compilationState Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + * + * @return builder + * + */ + public Builder compilationState(String compilationState) { + return compilationState(Output.of(compilationState)); + } + + /** + * @param createTime Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. The timestamp of when the rule was created. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param dataTables Output only. Resource names of the data tables used in this rule. + * + * @return builder + * + */ + public Builder dataTables(@Nullable Output> dataTables) { + $.dataTables = dataTables; + return this; + } + + /** + * @param dataTables Output only. Resource names of the data tables used in this rule. + * + * @return builder + * + */ + public Builder dataTables(List dataTables) { + return dataTables(Output.of(dataTables)); + } + + /** + * @param dataTables Output only. Resource names of the data tables used in this rule. + * + * @return builder + * + */ + public Builder dataTables(String... dataTables) { + return dataTables(List.of(dataTables)); + } + + /** + * @param deletionPolicy Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + * @return builder + * + */ + public Builder deletionPolicy(@Nullable Output deletionPolicy) { + $.deletionPolicy = deletionPolicy; + return this; + } + + /** + * @param deletionPolicy Policy to determine if the rule should be deleted forcefully. + * If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + * + * @return builder + * + */ + public Builder deletionPolicy(String deletionPolicy) { + return deletionPolicy(Output.of(deletionPolicy)); + } + + /** + * @param displayName The display name of the severity level. Extracted from the meta section of + * the rule text. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The display name of the severity level. Extracted from the meta section of + * the rule text. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param etag The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + * @return builder + * + */ + public Builder instance(@Nullable Output instance) { + $.instance = instance; + return this; + } + + /** + * @param instance The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * *** + * + * @return builder + * + */ + public Builder instance(String instance) { + return instance(Output.of(instance)); + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param metadata Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder metadata(@Nullable Output> metadata) { + $.metadata = metadata; + return this; + } + + /** + * @param metadata Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder metadata(Map metadata) { + return metadata(Output.of(metadata)); + } + + /** + * @param name Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param nearRealTimeLiveRuleEligible Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + * @return builder + * + */ + public Builder nearRealTimeLiveRuleEligible(@Nullable Output nearRealTimeLiveRuleEligible) { + $.nearRealTimeLiveRuleEligible = nearRealTimeLiveRuleEligible; + return this; + } + + /** + * @param nearRealTimeLiveRuleEligible Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + * + * @return builder + * + */ + public Builder nearRealTimeLiveRuleEligible(Boolean nearRealTimeLiveRuleEligible) { + return nearRealTimeLiveRuleEligible(Output.of(nearRealTimeLiveRuleEligible)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param referenceLists Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder referenceLists(@Nullable Output> referenceLists) { + $.referenceLists = referenceLists; + return this; + } + + /** + * @param referenceLists Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder referenceLists(List referenceLists) { + return referenceLists(Output.of(referenceLists)); + } + + /** + * @param referenceLists Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder referenceLists(String... referenceLists) { + return referenceLists(List.of(referenceLists)); + } + + /** + * @param revisionCreateTime Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + * @return builder + * + */ + public Builder revisionCreateTime(@Nullable Output revisionCreateTime) { + $.revisionCreateTime = revisionCreateTime; + return this; + } + + /** + * @param revisionCreateTime Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + * + * @return builder + * + */ + public Builder revisionCreateTime(String revisionCreateTime) { + return revisionCreateTime(Output.of(revisionCreateTime)); + } + + /** + * @param revisionId Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + * @return builder + * + */ + public Builder revisionId(@Nullable Output revisionId) { + $.revisionId = revisionId; + return this; + } + + /** + * @param revisionId Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + * + * @return builder + * + */ + public Builder revisionId(String revisionId) { + return revisionId(Output.of(revisionId)); + } + + /** + * @param ruleId Rule Id is the ID of the Rule. + * + * @return builder + * + */ + public Builder ruleId(@Nullable Output ruleId) { + $.ruleId = ruleId; + return this; + } + + /** + * @param ruleId Rule Id is the ID of the Rule. + * + * @return builder + * + */ + public Builder ruleId(String ruleId) { + return ruleId(Output.of(ruleId)); + } + + /** + * @param scope Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + * @return builder + * + */ + public Builder scope(@Nullable Output scope) { + $.scope = scope; + return this; + } + + /** + * @param scope Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + * + * @return builder + * + */ + public Builder scope(String scope) { + return scope(Output.of(scope)); + } + + /** + * @param severities (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + * @return builder + * + */ + public Builder severities(@Nullable Output> severities) { + $.severities = severities; + return this; + } + + /** + * @param severities (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + * @return builder + * + */ + public Builder severities(List severities) { + return severities(Output.of(severities)); + } + + /** + * @param severities (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + * @return builder + * + */ + public Builder severities(RuleSeverityArgs... severities) { + return severities(List.of(severities)); + } + + /** + * @param text The YARA-L content of the rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder text(@Nullable Output text) { + $.text = text; + return this; + } + + /** + * @param text The YARA-L content of the rule. + * Populated in FULL view. + * + * @return builder + * + */ + public Builder text(String text) { + return text(Output.of(text)); + } + + /** + * @param type Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + public RuleState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListEntry.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListEntry.java new file mode 100644 index 0000000000..cdb111cd84 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListEntry.java @@ -0,0 +1,62 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class ReferenceListEntry { + /** + * @return Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + */ + private String value; + + private ReferenceListEntry() {} + /** + * @return Required. The value of the entry. Maximum length is 512 characters. + * + * *** + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ReferenceListEntry defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String value; + public Builder() {} + public Builder(ReferenceListEntry defaults) { + Objects.requireNonNull(defaults); + this.value = defaults.value; + } + + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("ReferenceListEntry", "value"); + } + this.value = value; + return this; + } + public ReferenceListEntry build() { + final var _resultValue = new ReferenceListEntry(); + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfo.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfo.java new file mode 100644 index 0000000000..2761af501a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfo.java @@ -0,0 +1,60 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.chronicle.outputs.ReferenceListScopeInfoReferenceListScope; +import java.util.Objects; + +@CustomType +public final class ReferenceListScopeInfo { + /** + * @return ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + */ + private ReferenceListScopeInfoReferenceListScope referenceListScope; + + private ReferenceListScopeInfo() {} + /** + * @return ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + * + */ + public ReferenceListScopeInfoReferenceListScope referenceListScope() { + return this.referenceListScope; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ReferenceListScopeInfo defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private ReferenceListScopeInfoReferenceListScope referenceListScope; + public Builder() {} + public Builder(ReferenceListScopeInfo defaults) { + Objects.requireNonNull(defaults); + this.referenceListScope = defaults.referenceListScope; + } + + @CustomType.Setter + public Builder referenceListScope(ReferenceListScopeInfoReferenceListScope referenceListScope) { + if (referenceListScope == null) { + throw new MissingRequiredPropertyException("ReferenceListScopeInfo", "referenceListScope"); + } + this.referenceListScope = referenceListScope; + return this; + } + public ReferenceListScopeInfo build() { + final var _resultValue = new ReferenceListScopeInfo(); + _resultValue.referenceListScope = referenceListScope; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfoReferenceListScope.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfoReferenceListScope.java new file mode 100644 index 0000000000..1ea60f1613 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/ReferenceListScopeInfoReferenceListScope.java @@ -0,0 +1,64 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class ReferenceListScopeInfoReferenceListScope { + /** + * @return Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + */ + private @Nullable List scopeNames; + + private ReferenceListScopeInfoReferenceListScope() {} + /** + * @return Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + * + */ + public List scopeNames() { + return this.scopeNames == null ? List.of() : this.scopeNames; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ReferenceListScopeInfoReferenceListScope defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List scopeNames; + public Builder() {} + public Builder(ReferenceListScopeInfoReferenceListScope defaults) { + Objects.requireNonNull(defaults); + this.scopeNames = defaults.scopeNames; + } + + @CustomType.Setter + public Builder scopeNames(@Nullable List scopeNames) { + + this.scopeNames = scopeNames; + return this; + } + public Builder scopeNames(String... scopeNames) { + return scopeNames(List.of(scopeNames)); + } + public ReferenceListScopeInfoReferenceListScope build() { + final var _resultValue = new ReferenceListScopeInfoReferenceListScope(); + _resultValue.scopeNames = scopeNames; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnostic.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnostic.java new file mode 100644 index 0000000000..dbe9c615f8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnostic.java @@ -0,0 +1,139 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.chronicle.outputs.RuleCompilationDiagnosticPosition; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuleCompilationDiagnostic { + /** + * @return (Output) + * Output only. The diagnostic message. + * + */ + private @Nullable String message; + /** + * @return CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + */ + private @Nullable RuleCompilationDiagnosticPosition position; + /** + * @return (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + private @Nullable String severity; + /** + * @return (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + */ + private @Nullable String uri; + + private RuleCompilationDiagnostic() {} + /** + * @return (Output) + * Output only. The diagnostic message. + * + */ + public Optional message() { + return Optional.ofNullable(this.message); + } + /** + * @return CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + * + */ + public Optional position() { + return Optional.ofNullable(this.position); + } + /** + * @return (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + * + */ + public Optional severity() { + return Optional.ofNullable(this.severity); + } + /** + * @return (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + * + */ + public Optional uri() { + return Optional.ofNullable(this.uri); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuleCompilationDiagnostic defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String message; + private @Nullable RuleCompilationDiagnosticPosition position; + private @Nullable String severity; + private @Nullable String uri; + public Builder() {} + public Builder(RuleCompilationDiagnostic defaults) { + Objects.requireNonNull(defaults); + this.message = defaults.message; + this.position = defaults.position; + this.severity = defaults.severity; + this.uri = defaults.uri; + } + + @CustomType.Setter + public Builder message(@Nullable String message) { + + this.message = message; + return this; + } + @CustomType.Setter + public Builder position(@Nullable RuleCompilationDiagnosticPosition position) { + + this.position = position; + return this; + } + @CustomType.Setter + public Builder severity(@Nullable String severity) { + + this.severity = severity; + return this; + } + @CustomType.Setter + public Builder uri(@Nullable String uri) { + + this.uri = uri; + return this; + } + public RuleCompilationDiagnostic build() { + final var _resultValue = new RuleCompilationDiagnostic(); + _resultValue.message = message; + _resultValue.position = position; + _resultValue.severity = severity; + _resultValue.uri = uri; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnosticPosition.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnosticPosition.java new file mode 100644 index 0000000000..420eecab96 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleCompilationDiagnosticPosition.java @@ -0,0 +1,128 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuleCompilationDiagnosticPosition { + /** + * @return (Output) + * Output only. End column number, beginning at 1. + * + */ + private @Nullable Integer endColumn; + /** + * @return (Output) + * Output only. End line number, beginning at 1. + * + */ + private @Nullable Integer endLine; + /** + * @return (Output) + * Output only. Start column number, beginning at 1. + * + */ + private @Nullable Integer startColumn; + /** + * @return (Output) + * Output only. Start line number, beginning at 1. + * + */ + private @Nullable Integer startLine; + + private RuleCompilationDiagnosticPosition() {} + /** + * @return (Output) + * Output only. End column number, beginning at 1. + * + */ + public Optional endColumn() { + return Optional.ofNullable(this.endColumn); + } + /** + * @return (Output) + * Output only. End line number, beginning at 1. + * + */ + public Optional endLine() { + return Optional.ofNullable(this.endLine); + } + /** + * @return (Output) + * Output only. Start column number, beginning at 1. + * + */ + public Optional startColumn() { + return Optional.ofNullable(this.startColumn); + } + /** + * @return (Output) + * Output only. Start line number, beginning at 1. + * + */ + public Optional startLine() { + return Optional.ofNullable(this.startLine); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuleCompilationDiagnosticPosition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer endColumn; + private @Nullable Integer endLine; + private @Nullable Integer startColumn; + private @Nullable Integer startLine; + public Builder() {} + public Builder(RuleCompilationDiagnosticPosition defaults) { + Objects.requireNonNull(defaults); + this.endColumn = defaults.endColumn; + this.endLine = defaults.endLine; + this.startColumn = defaults.startColumn; + this.startLine = defaults.startLine; + } + + @CustomType.Setter + public Builder endColumn(@Nullable Integer endColumn) { + + this.endColumn = endColumn; + return this; + } + @CustomType.Setter + public Builder endLine(@Nullable Integer endLine) { + + this.endLine = endLine; + return this; + } + @CustomType.Setter + public Builder startColumn(@Nullable Integer startColumn) { + + this.startColumn = startColumn; + return this; + } + @CustomType.Setter + public Builder startLine(@Nullable Integer startLine) { + + this.startLine = startLine; + return this; + } + public RuleCompilationDiagnosticPosition build() { + final var _resultValue = new RuleCompilationDiagnosticPosition(); + _resultValue.endColumn = endColumn; + _resultValue.endLine = endLine; + _resultValue.startColumn = startColumn; + _resultValue.startLine = startLine; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleSeverity.java b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleSeverity.java new file mode 100644 index 0000000000..8c9736fc20 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/chronicle/outputs/RuleSeverity.java @@ -0,0 +1,59 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.chronicle.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuleSeverity { + /** + * @return The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + private @Nullable String displayName; + + private RuleSeverity() {} + /** + * @return The display name of the severity level. Extracted from the meta section of + * the rule text. + * + */ + public Optional displayName() { + return Optional.ofNullable(this.displayName); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuleSeverity defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String displayName; + public Builder() {} + public Builder(RuleSeverity defaults) { + Objects.requireNonNull(defaults); + this.displayName = defaults.displayName; + } + + @CustomType.Setter + public Builder displayName(@Nullable String displayName) { + + this.displayName = displayName; + return this; + } + public RuleSeverity build() { + final var _resultValue = new RuleSeverity(); + _resultValue.displayName = displayName; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplate.java new file mode 100644 index 0000000000..0863e67086 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplate.java @@ -0,0 +1,554 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.colab.RuntimeTemplateArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateState; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateDataPersistentDiskSpec; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateEncryptionSpec; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateEucConfig; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateIdleShutdownConfig; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateMachineSpec; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateNetworkSpec; +import com.pulumi.gcp.colab.outputs.RuntimeTemplateShieldedVmConfig; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, + * as well as common settings such as the network and whether public internet access is enabled. When you create + * a runtime, its VM is created according to the specifications of a runtime template.' + * + * To get more information about RuntimeTemplate, see: + * + * * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) + * * How-to Guides + * * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) + * + * ## Example Usage + * + * ### Colab Runtime Template Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.colab.RuntimeTemplate;
+ * import com.pulumi.gcp.colab.RuntimeTemplateArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var runtime_template = new RuntimeTemplate("runtime-template", RuntimeTemplateArgs.builder()
+ *             .name("colab-runtime-template")
+ *             .displayName("Runtime template basic")
+ *             .location("us-central1")
+ *             .machineSpec(RuntimeTemplateMachineSpecArgs.builder()
+ *                 .machineType("e2-standard-4")
+ *                 .build())
+ *             .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()
+ *                 .enableInternetAccess(true)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Colab Runtime Template No Name + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.colab.RuntimeTemplate;
+ * import com.pulumi.gcp.colab.RuntimeTemplateArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var runtime_template = new RuntimeTemplate("runtime-template", RuntimeTemplateArgs.builder()
+ *             .displayName("Runtime template no name")
+ *             .location("us-central1")
+ *             .machineSpec(RuntimeTemplateMachineSpecArgs.builder()
+ *                 .machineType("e2-standard-4")
+ *                 .build())
+ *             .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()
+ *                 .enableInternetAccess(true)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Colab Runtime Template Full + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.compute.Subnetwork;
+ * import com.pulumi.gcp.compute.SubnetworkArgs;
+ * import com.pulumi.gcp.colab.RuntimeTemplate;
+ * import com.pulumi.gcp.colab.RuntimeTemplateArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateDataPersistentDiskSpecArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateIdleShutdownConfigArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateEucConfigArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateShieldedVmConfigArgs;
+ * import com.pulumi.gcp.colab.inputs.RuntimeTemplateEncryptionSpecArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var myNetwork = new Network("myNetwork", NetworkArgs.builder()
+ *             .name("colab-test-default")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var mySubnetwork = new Subnetwork("mySubnetwork", SubnetworkArgs.builder()
+ *             .name("colab-test-default")
+ *             .network(myNetwork.id())
+ *             .region("us-central1")
+ *             .ipCidrRange("10.0.1.0/24")
+ *             .build());
+ * 
+ *         var runtime_template = new RuntimeTemplate("runtime-template", RuntimeTemplateArgs.builder()
+ *             .name("colab-runtime-template")
+ *             .displayName("Runtime template full")
+ *             .location("us-central1")
+ *             .description("Full runtime template")
+ *             .machineSpec(RuntimeTemplateMachineSpecArgs.builder()
+ *                 .machineType("n1-standard-2")
+ *                 .acceleratorType("NVIDIA_TESLA_T4")
+ *                 .acceleratorCount("1")
+ *                 .build())
+ *             .dataPersistentDiskSpec(RuntimeTemplateDataPersistentDiskSpecArgs.builder()
+ *                 .diskType("pd-standard")
+ *                 .diskSizeGb(200)
+ *                 .build())
+ *             .networkSpec(RuntimeTemplateNetworkSpecArgs.builder()
+ *                 .enableInternetAccess(true)
+ *                 .network(myNetwork.id())
+ *                 .subnetwork(mySubnetwork.id())
+ *                 .build())
+ *             .labels(Map.of("k", "val"))
+ *             .idleShutdownConfig(RuntimeTemplateIdleShutdownConfigArgs.builder()
+ *                 .idleTimeout("3600s")
+ *                 .build())
+ *             .eucConfig(RuntimeTemplateEucConfigArgs.builder()
+ *                 .eucDisabled(true)
+ *                 .build())
+ *             .shieldedVmConfig(RuntimeTemplateShieldedVmConfigArgs.builder()
+ *                 .enableSecureBoot(true)
+ *                 .build())
+ *             .networkTags(            
+ *                 "abc",
+ *                 "def")
+ *             .encryptionSpec(RuntimeTemplateEncryptionSpecArgs.builder()
+ *                 .kmsKeyName("my-crypto-key")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * RuntimeTemplate can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` + * + * * `{{project}}/{{location}}/{{name}}` + * + * * `{{location}}/{{name}}` + * + * When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:colab/runtimeTemplate:RuntimeTemplate") +public class RuntimeTemplate extends com.pulumi.resources.CustomResource { + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + @Export(name="dataPersistentDiskSpec", refs={RuntimeTemplateDataPersistentDiskSpec.class}, tree="[0]") + private Output dataPersistentDiskSpec; + + /** + * @return The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + public Output dataPersistentDiskSpec() { + return this.dataPersistentDiskSpec; + } + /** + * The description of the Runtime Template. + * + */ + @Export(name="description", refs={String.class}, tree="[0]") + private Output description; + + /** + * @return The description of the Runtime Template. + * + */ + public Output> description() { + return Codegen.optional(this.description); + } + /** + * Required. The display name of the Runtime Template. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return Required. The display name of the Runtime Template. + * + */ + public Output displayName() { + return this.displayName; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + @Export(name="encryptionSpec", refs={RuntimeTemplateEncryptionSpec.class}, tree="[0]") + private Output encryptionSpec; + + /** + * @return Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + public Output> encryptionSpec() { + return Codegen.optional(this.encryptionSpec); + } + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + @Export(name="eucConfig", refs={RuntimeTemplateEucConfig.class}, tree="[0]") + private Output eucConfig; + + /** + * @return EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + public Output> eucConfig() { + return Codegen.optional(this.eucConfig); + } + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + @Export(name="idleShutdownConfig", refs={RuntimeTemplateIdleShutdownConfig.class}, tree="[0]") + private Output idleShutdownConfig; + + /** + * @return Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + public Output idleShutdownConfig() { + return this.idleShutdownConfig; + } + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + public Output location() { + return this.location; + } + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + @Export(name="machineSpec", refs={RuntimeTemplateMachineSpec.class}, tree="[0]") + private Output machineSpec; + + /** + * @return 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + public Output machineSpec() { + return this.machineSpec; + } + /** + * The resource name of the Runtime Template + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the Runtime Template + * + */ + public Output name() { + return this.name; + } + /** + * The network configuration for the runtime. + * Structure is documented below. + * + */ + @Export(name="networkSpec", refs={RuntimeTemplateNetworkSpec.class}, tree="[0]") + private Output networkSpec; + + /** + * @return The network configuration for the runtime. + * Structure is documented below. + * + */ + public Output networkSpec() { + return this.networkSpec; + } + /** + * Applies the given Compute Engine tags to the runtime. + * + */ + @Export(name="networkTags", refs={List.class,String.class}, tree="[0,1]") + private Output> networkTags; + + /** + * @return Applies the given Compute Engine tags to the runtime. + * + */ + public Output>> networkTags() { + return Codegen.optional(this.networkTags); + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Runtime Shielded VM spec. + * Structure is documented below. + * + */ + @Export(name="shieldedVmConfig", refs={RuntimeTemplateShieldedVmConfig.class}, tree="[0]") + private Output shieldedVmConfig; + + /** + * @return Runtime Shielded VM spec. + * Structure is documented below. + * + */ + public Output> shieldedVmConfig() { + return Codegen.optional(this.shieldedVmConfig); + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RuntimeTemplate(java.lang.String name) { + this(name, RuntimeTemplateArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RuntimeTemplate(java.lang.String name, RuntimeTemplateArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RuntimeTemplate(java.lang.String name, RuntimeTemplateArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:colab/runtimeTemplate:RuntimeTemplate", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RuntimeTemplate(java.lang.String name, Output id, @Nullable RuntimeTemplateState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:colab/runtimeTemplate:RuntimeTemplate", name, state, makeResourceOptions(options, id), false); + } + + private static RuntimeTemplateArgs makeArgs(RuntimeTemplateArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RuntimeTemplateArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RuntimeTemplate get(java.lang.String name, Output id, @Nullable RuntimeTemplateState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RuntimeTemplate(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplateArgs.java new file mode 100644 index 0000000000..8d9eed79c3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/RuntimeTemplateArgs.java @@ -0,0 +1,638 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateDataPersistentDiskSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateEncryptionSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateEucConfigArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateIdleShutdownConfigArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateShieldedVmConfigArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateArgs Empty = new RuntimeTemplateArgs(); + + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + @Import(name="dataPersistentDiskSpec") + private @Nullable Output dataPersistentDiskSpec; + + /** + * @return The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + public Optional> dataPersistentDiskSpec() { + return Optional.ofNullable(this.dataPersistentDiskSpec); + } + + /** + * The description of the Runtime Template. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return The description of the Runtime Template. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Required. The display name of the Runtime Template. + * + */ + @Import(name="displayName", required=true) + private Output displayName; + + /** + * @return Required. The display name of the Runtime Template. + * + */ + public Output displayName() { + return this.displayName; + } + + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + @Import(name="encryptionSpec") + private @Nullable Output encryptionSpec; + + /** + * @return Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + public Optional> encryptionSpec() { + return Optional.ofNullable(this.encryptionSpec); + } + + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + @Import(name="eucConfig") + private @Nullable Output eucConfig; + + /** + * @return EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + public Optional> eucConfig() { + return Optional.ofNullable(this.eucConfig); + } + + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + @Import(name="idleShutdownConfig") + private @Nullable Output idleShutdownConfig; + + /** + * @return Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + public Optional> idleShutdownConfig() { + return Optional.ofNullable(this.idleShutdownConfig); + } + + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + public Output location() { + return this.location; + } + + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + @Import(name="machineSpec") + private @Nullable Output machineSpec; + + /** + * @return 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + public Optional> machineSpec() { + return Optional.ofNullable(this.machineSpec); + } + + /** + * The resource name of the Runtime Template + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the Runtime Template + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The network configuration for the runtime. + * Structure is documented below. + * + */ + @Import(name="networkSpec") + private @Nullable Output networkSpec; + + /** + * @return The network configuration for the runtime. + * Structure is documented below. + * + */ + public Optional> networkSpec() { + return Optional.ofNullable(this.networkSpec); + } + + /** + * Applies the given Compute Engine tags to the runtime. + * + */ + @Import(name="networkTags") + private @Nullable Output> networkTags; + + /** + * @return Applies the given Compute Engine tags to the runtime. + * + */ + public Optional>> networkTags() { + return Optional.ofNullable(this.networkTags); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Runtime Shielded VM spec. + * Structure is documented below. + * + */ + @Import(name="shieldedVmConfig") + private @Nullable Output shieldedVmConfig; + + /** + * @return Runtime Shielded VM spec. + * Structure is documented below. + * + */ + public Optional> shieldedVmConfig() { + return Optional.ofNullable(this.shieldedVmConfig); + } + + private RuntimeTemplateArgs() {} + + private RuntimeTemplateArgs(RuntimeTemplateArgs $) { + this.dataPersistentDiskSpec = $.dataPersistentDiskSpec; + this.description = $.description; + this.displayName = $.displayName; + this.encryptionSpec = $.encryptionSpec; + this.eucConfig = $.eucConfig; + this.idleShutdownConfig = $.idleShutdownConfig; + this.labels = $.labels; + this.location = $.location; + this.machineSpec = $.machineSpec; + this.name = $.name; + this.networkSpec = $.networkSpec; + this.networkTags = $.networkTags; + this.project = $.project; + this.shieldedVmConfig = $.shieldedVmConfig; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateArgs $; + + public Builder() { + $ = new RuntimeTemplateArgs(); + } + + public Builder(RuntimeTemplateArgs defaults) { + $ = new RuntimeTemplateArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param dataPersistentDiskSpec The configuration for the data disk of the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder dataPersistentDiskSpec(@Nullable Output dataPersistentDiskSpec) { + $.dataPersistentDiskSpec = dataPersistentDiskSpec; + return this; + } + + /** + * @param dataPersistentDiskSpec The configuration for the data disk of the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder dataPersistentDiskSpec(RuntimeTemplateDataPersistentDiskSpecArgs dataPersistentDiskSpec) { + return dataPersistentDiskSpec(Output.of(dataPersistentDiskSpec)); + } + + /** + * @param description The description of the Runtime Template. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description The description of the Runtime Template. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param displayName Required. The display name of the Runtime Template. + * + * @return builder + * + */ + public Builder displayName(Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Required. The display name of the Runtime Template. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param encryptionSpec Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder encryptionSpec(@Nullable Output encryptionSpec) { + $.encryptionSpec = encryptionSpec; + return this; + } + + /** + * @param encryptionSpec Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder encryptionSpec(RuntimeTemplateEncryptionSpecArgs encryptionSpec) { + return encryptionSpec(Output.of(encryptionSpec)); + } + + /** + * @param eucConfig EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder eucConfig(@Nullable Output eucConfig) { + $.eucConfig = eucConfig; + return this; + } + + /** + * @param eucConfig EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder eucConfig(RuntimeTemplateEucConfigArgs eucConfig) { + return eucConfig(Output.of(eucConfig)); + } + + /** + * @param idleShutdownConfig Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder idleShutdownConfig(@Nullable Output idleShutdownConfig) { + $.idleShutdownConfig = idleShutdownConfig; + return this; + } + + /** + * @param idleShutdownConfig Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder idleShutdownConfig(RuntimeTemplateIdleShutdownConfigArgs idleShutdownConfig) { + return idleShutdownConfig(Output.of(idleShutdownConfig)); + } + + /** + * @param labels Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param machineSpec 'The machine configuration of the runtime.' + * Structure is documented below. + * + * @return builder + * + */ + public Builder machineSpec(@Nullable Output machineSpec) { + $.machineSpec = machineSpec; + return this; + } + + /** + * @param machineSpec 'The machine configuration of the runtime.' + * Structure is documented below. + * + * @return builder + * + */ + public Builder machineSpec(RuntimeTemplateMachineSpecArgs machineSpec) { + return machineSpec(Output.of(machineSpec)); + } + + /** + * @param name The resource name of the Runtime Template + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the Runtime Template + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param networkSpec The network configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder networkSpec(@Nullable Output networkSpec) { + $.networkSpec = networkSpec; + return this; + } + + /** + * @param networkSpec The network configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder networkSpec(RuntimeTemplateNetworkSpecArgs networkSpec) { + return networkSpec(Output.of(networkSpec)); + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(@Nullable Output> networkTags) { + $.networkTags = networkTags; + return this; + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(List networkTags) { + return networkTags(Output.of(networkTags)); + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(String... networkTags) { + return networkTags(List.of(networkTags)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param shieldedVmConfig Runtime Shielded VM spec. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shieldedVmConfig(@Nullable Output shieldedVmConfig) { + $.shieldedVmConfig = shieldedVmConfig; + return this; + } + + /** + * @param shieldedVmConfig Runtime Shielded VM spec. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shieldedVmConfig(RuntimeTemplateShieldedVmConfigArgs shieldedVmConfig) { + return shieldedVmConfig(Output.of(shieldedVmConfig)); + } + + public RuntimeTemplateArgs build() { + if ($.displayName == null) { + throw new MissingRequiredPropertyException("RuntimeTemplateArgs", "displayName"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("RuntimeTemplateArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateDataPersistentDiskSpecArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateDataPersistentDiskSpecArgs.java new file mode 100644 index 0000000000..3b2fcd736a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateDataPersistentDiskSpecArgs.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateDataPersistentDiskSpecArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateDataPersistentDiskSpecArgs Empty = new RuntimeTemplateDataPersistentDiskSpecArgs(); + + /** + * The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + */ + @Import(name="diskSizeGb") + private @Nullable Output diskSizeGb; + + /** + * @return The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + */ + public Optional> diskSizeGb() { + return Optional.ofNullable(this.diskSizeGb); + } + + /** + * The type of the persistent disk. + * + */ + @Import(name="diskType") + private @Nullable Output diskType; + + /** + * @return The type of the persistent disk. + * + */ + public Optional> diskType() { + return Optional.ofNullable(this.diskType); + } + + private RuntimeTemplateDataPersistentDiskSpecArgs() {} + + private RuntimeTemplateDataPersistentDiskSpecArgs(RuntimeTemplateDataPersistentDiskSpecArgs $) { + this.diskSizeGb = $.diskSizeGb; + this.diskType = $.diskType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateDataPersistentDiskSpecArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateDataPersistentDiskSpecArgs $; + + public Builder() { + $ = new RuntimeTemplateDataPersistentDiskSpecArgs(); + } + + public Builder(RuntimeTemplateDataPersistentDiskSpecArgs defaults) { + $ = new RuntimeTemplateDataPersistentDiskSpecArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param diskSizeGb The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + * @return builder + * + */ + public Builder diskSizeGb(@Nullable Output diskSizeGb) { + $.diskSizeGb = diskSizeGb; + return this; + } + + /** + * @param diskSizeGb The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + * @return builder + * + */ + public Builder diskSizeGb(String diskSizeGb) { + return diskSizeGb(Output.of(diskSizeGb)); + } + + /** + * @param diskType The type of the persistent disk. + * + * @return builder + * + */ + public Builder diskType(@Nullable Output diskType) { + $.diskType = diskType; + return this; + } + + /** + * @param diskType The type of the persistent disk. + * + * @return builder + * + */ + public Builder diskType(String diskType) { + return diskType(Output.of(diskType)); + } + + public RuntimeTemplateDataPersistentDiskSpecArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEncryptionSpecArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEncryptionSpecArgs.java new file mode 100644 index 0000000000..5ba0f1836b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEncryptionSpecArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateEncryptionSpecArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateEncryptionSpecArgs Empty = new RuntimeTemplateEncryptionSpecArgs(); + + /** + * The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + */ + @Import(name="kmsKeyName") + private @Nullable Output kmsKeyName; + + /** + * @return The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + */ + public Optional> kmsKeyName() { + return Optional.ofNullable(this.kmsKeyName); + } + + private RuntimeTemplateEncryptionSpecArgs() {} + + private RuntimeTemplateEncryptionSpecArgs(RuntimeTemplateEncryptionSpecArgs $) { + this.kmsKeyName = $.kmsKeyName; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateEncryptionSpecArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateEncryptionSpecArgs $; + + public Builder() { + $ = new RuntimeTemplateEncryptionSpecArgs(); + } + + public Builder(RuntimeTemplateEncryptionSpecArgs defaults) { + $ = new RuntimeTemplateEncryptionSpecArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param kmsKeyName The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + * @return builder + * + */ + public Builder kmsKeyName(@Nullable Output kmsKeyName) { + $.kmsKeyName = kmsKeyName; + return this; + } + + /** + * @param kmsKeyName The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + * @return builder + * + */ + public Builder kmsKeyName(String kmsKeyName) { + return kmsKeyName(Output.of(kmsKeyName)); + } + + public RuntimeTemplateEncryptionSpecArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEucConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEucConfigArgs.java new file mode 100644 index 0000000000..29663c51bc --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateEucConfigArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateEucConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateEucConfigArgs Empty = new RuntimeTemplateEucConfigArgs(); + + /** + * Disable end user credential access for the runtime. + * + */ + @Import(name="eucDisabled") + private @Nullable Output eucDisabled; + + /** + * @return Disable end user credential access for the runtime. + * + */ + public Optional> eucDisabled() { + return Optional.ofNullable(this.eucDisabled); + } + + private RuntimeTemplateEucConfigArgs() {} + + private RuntimeTemplateEucConfigArgs(RuntimeTemplateEucConfigArgs $) { + this.eucDisabled = $.eucDisabled; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateEucConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateEucConfigArgs $; + + public Builder() { + $ = new RuntimeTemplateEucConfigArgs(); + } + + public Builder(RuntimeTemplateEucConfigArgs defaults) { + $ = new RuntimeTemplateEucConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param eucDisabled Disable end user credential access for the runtime. + * + * @return builder + * + */ + public Builder eucDisabled(@Nullable Output eucDisabled) { + $.eucDisabled = eucDisabled; + return this; + } + + /** + * @param eucDisabled Disable end user credential access for the runtime. + * + * @return builder + * + */ + public Builder eucDisabled(Boolean eucDisabled) { + return eucDisabled(Output.of(eucDisabled)); + } + + public RuntimeTemplateEucConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateIdleShutdownConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateIdleShutdownConfigArgs.java new file mode 100644 index 0000000000..c15e434be1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateIdleShutdownConfigArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateIdleShutdownConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateIdleShutdownConfigArgs Empty = new RuntimeTemplateIdleShutdownConfigArgs(); + + /** + * The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + */ + @Import(name="idleTimeout") + private @Nullable Output idleTimeout; + + /** + * @return The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + */ + public Optional> idleTimeout() { + return Optional.ofNullable(this.idleTimeout); + } + + private RuntimeTemplateIdleShutdownConfigArgs() {} + + private RuntimeTemplateIdleShutdownConfigArgs(RuntimeTemplateIdleShutdownConfigArgs $) { + this.idleTimeout = $.idleTimeout; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateIdleShutdownConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateIdleShutdownConfigArgs $; + + public Builder() { + $ = new RuntimeTemplateIdleShutdownConfigArgs(); + } + + public Builder(RuntimeTemplateIdleShutdownConfigArgs defaults) { + $ = new RuntimeTemplateIdleShutdownConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param idleTimeout The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + * @return builder + * + */ + public Builder idleTimeout(@Nullable Output idleTimeout) { + $.idleTimeout = idleTimeout; + return this; + } + + /** + * @param idleTimeout The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + * @return builder + * + */ + public Builder idleTimeout(String idleTimeout) { + return idleTimeout(Output.of(idleTimeout)); + } + + public RuntimeTemplateIdleShutdownConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateMachineSpecArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateMachineSpecArgs.java new file mode 100644 index 0000000000..ff193cd103 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateMachineSpecArgs.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateMachineSpecArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateMachineSpecArgs Empty = new RuntimeTemplateMachineSpecArgs(); + + /** + * The number of accelerators used by the runtime. + * + */ + @Import(name="acceleratorCount") + private @Nullable Output acceleratorCount; + + /** + * @return The number of accelerators used by the runtime. + * + */ + public Optional> acceleratorCount() { + return Optional.ofNullable(this.acceleratorCount); + } + + /** + * The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + */ + @Import(name="acceleratorType") + private @Nullable Output acceleratorType; + + /** + * @return The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + */ + public Optional> acceleratorType() { + return Optional.ofNullable(this.acceleratorType); + } + + /** + * The Compute Engine machine type selected for the runtime. + * + */ + @Import(name="machineType") + private @Nullable Output machineType; + + /** + * @return The Compute Engine machine type selected for the runtime. + * + */ + public Optional> machineType() { + return Optional.ofNullable(this.machineType); + } + + private RuntimeTemplateMachineSpecArgs() {} + + private RuntimeTemplateMachineSpecArgs(RuntimeTemplateMachineSpecArgs $) { + this.acceleratorCount = $.acceleratorCount; + this.acceleratorType = $.acceleratorType; + this.machineType = $.machineType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateMachineSpecArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateMachineSpecArgs $; + + public Builder() { + $ = new RuntimeTemplateMachineSpecArgs(); + } + + public Builder(RuntimeTemplateMachineSpecArgs defaults) { + $ = new RuntimeTemplateMachineSpecArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param acceleratorCount The number of accelerators used by the runtime. + * + * @return builder + * + */ + public Builder acceleratorCount(@Nullable Output acceleratorCount) { + $.acceleratorCount = acceleratorCount; + return this; + } + + /** + * @param acceleratorCount The number of accelerators used by the runtime. + * + * @return builder + * + */ + public Builder acceleratorCount(Integer acceleratorCount) { + return acceleratorCount(Output.of(acceleratorCount)); + } + + /** + * @param acceleratorType The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + * @return builder + * + */ + public Builder acceleratorType(@Nullable Output acceleratorType) { + $.acceleratorType = acceleratorType; + return this; + } + + /** + * @param acceleratorType The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + * @return builder + * + */ + public Builder acceleratorType(String acceleratorType) { + return acceleratorType(Output.of(acceleratorType)); + } + + /** + * @param machineType The Compute Engine machine type selected for the runtime. + * + * @return builder + * + */ + public Builder machineType(@Nullable Output machineType) { + $.machineType = machineType; + return this; + } + + /** + * @param machineType The Compute Engine machine type selected for the runtime. + * + * @return builder + * + */ + public Builder machineType(String machineType) { + return machineType(Output.of(machineType)); + } + + public RuntimeTemplateMachineSpecArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateNetworkSpecArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateNetworkSpecArgs.java new file mode 100644 index 0000000000..bee47ac464 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateNetworkSpecArgs.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateNetworkSpecArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateNetworkSpecArgs Empty = new RuntimeTemplateNetworkSpecArgs(); + + /** + * Enable public internet access for the runtime. + * + */ + @Import(name="enableInternetAccess") + private @Nullable Output enableInternetAccess; + + /** + * @return Enable public internet access for the runtime. + * + */ + public Optional> enableInternetAccess() { + return Optional.ofNullable(this.enableInternetAccess); + } + + /** + * The name of the VPC that this runtime is in. + * + */ + @Import(name="network") + private @Nullable Output network; + + /** + * @return The name of the VPC that this runtime is in. + * + */ + public Optional> network() { + return Optional.ofNullable(this.network); + } + + /** + * The name of the subnetwork that this runtime is in. + * + */ + @Import(name="subnetwork") + private @Nullable Output subnetwork; + + /** + * @return The name of the subnetwork that this runtime is in. + * + */ + public Optional> subnetwork() { + return Optional.ofNullable(this.subnetwork); + } + + private RuntimeTemplateNetworkSpecArgs() {} + + private RuntimeTemplateNetworkSpecArgs(RuntimeTemplateNetworkSpecArgs $) { + this.enableInternetAccess = $.enableInternetAccess; + this.network = $.network; + this.subnetwork = $.subnetwork; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateNetworkSpecArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateNetworkSpecArgs $; + + public Builder() { + $ = new RuntimeTemplateNetworkSpecArgs(); + } + + public Builder(RuntimeTemplateNetworkSpecArgs defaults) { + $ = new RuntimeTemplateNetworkSpecArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enableInternetAccess Enable public internet access for the runtime. + * + * @return builder + * + */ + public Builder enableInternetAccess(@Nullable Output enableInternetAccess) { + $.enableInternetAccess = enableInternetAccess; + return this; + } + + /** + * @param enableInternetAccess Enable public internet access for the runtime. + * + * @return builder + * + */ + public Builder enableInternetAccess(Boolean enableInternetAccess) { + return enableInternetAccess(Output.of(enableInternetAccess)); + } + + /** + * @param network The name of the VPC that this runtime is in. + * + * @return builder + * + */ + public Builder network(@Nullable Output network) { + $.network = network; + return this; + } + + /** + * @param network The name of the VPC that this runtime is in. + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param subnetwork The name of the subnetwork that this runtime is in. + * + * @return builder + * + */ + public Builder subnetwork(@Nullable Output subnetwork) { + $.subnetwork = subnetwork; + return this; + } + + /** + * @param subnetwork The name of the subnetwork that this runtime is in. + * + * @return builder + * + */ + public Builder subnetwork(String subnetwork) { + return subnetwork(Output.of(subnetwork)); + } + + public RuntimeTemplateNetworkSpecArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateShieldedVmConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateShieldedVmConfigArgs.java new file mode 100644 index 0000000000..479c75c3b8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateShieldedVmConfigArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateShieldedVmConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateShieldedVmConfigArgs Empty = new RuntimeTemplateShieldedVmConfigArgs(); + + /** + * Enables secure boot for the runtime. + * + */ + @Import(name="enableSecureBoot") + private @Nullable Output enableSecureBoot; + + /** + * @return Enables secure boot for the runtime. + * + */ + public Optional> enableSecureBoot() { + return Optional.ofNullable(this.enableSecureBoot); + } + + private RuntimeTemplateShieldedVmConfigArgs() {} + + private RuntimeTemplateShieldedVmConfigArgs(RuntimeTemplateShieldedVmConfigArgs $) { + this.enableSecureBoot = $.enableSecureBoot; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateShieldedVmConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateShieldedVmConfigArgs $; + + public Builder() { + $ = new RuntimeTemplateShieldedVmConfigArgs(); + } + + public Builder(RuntimeTemplateShieldedVmConfigArgs defaults) { + $ = new RuntimeTemplateShieldedVmConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enableSecureBoot Enables secure boot for the runtime. + * + * @return builder + * + */ + public Builder enableSecureBoot(@Nullable Output enableSecureBoot) { + $.enableSecureBoot = enableSecureBoot; + return this; + } + + /** + * @param enableSecureBoot Enables secure boot for the runtime. + * + * @return builder + * + */ + public Builder enableSecureBoot(Boolean enableSecureBoot) { + return enableSecureBoot(Output.of(enableSecureBoot)); + } + + public RuntimeTemplateShieldedVmConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateState.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateState.java new file mode 100644 index 0000000000..79594a71ee --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/inputs/RuntimeTemplateState.java @@ -0,0 +1,709 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateDataPersistentDiskSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateEncryptionSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateEucConfigArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateIdleShutdownConfigArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateMachineSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateNetworkSpecArgs; +import com.pulumi.gcp.colab.inputs.RuntimeTemplateShieldedVmConfigArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RuntimeTemplateState extends com.pulumi.resources.ResourceArgs { + + public static final RuntimeTemplateState Empty = new RuntimeTemplateState(); + + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + @Import(name="dataPersistentDiskSpec") + private @Nullable Output dataPersistentDiskSpec; + + /** + * @return The configuration for the data disk of the runtime. + * Structure is documented below. + * + */ + public Optional> dataPersistentDiskSpec() { + return Optional.ofNullable(this.dataPersistentDiskSpec); + } + + /** + * The description of the Runtime Template. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return The description of the Runtime Template. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Required. The display name of the Runtime Template. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Required. The display name of the Runtime Template. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + @Import(name="encryptionSpec") + private @Nullable Output encryptionSpec; + + /** + * @return Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + */ + public Optional> encryptionSpec() { + return Optional.ofNullable(this.encryptionSpec); + } + + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + @Import(name="eucConfig") + private @Nullable Output eucConfig; + + /** + * @return EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + */ + public Optional> eucConfig() { + return Optional.ofNullable(this.eucConfig); + } + + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + @Import(name="idleShutdownConfig") + private @Nullable Output idleShutdownConfig; + + /** + * @return Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + */ + public Optional> idleShutdownConfig() { + return Optional.ofNullable(this.idleShutdownConfig); + } + + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + @Import(name="machineSpec") + private @Nullable Output machineSpec; + + /** + * @return 'The machine configuration of the runtime.' + * Structure is documented below. + * + */ + public Optional> machineSpec() { + return Optional.ofNullable(this.machineSpec); + } + + /** + * The resource name of the Runtime Template + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the Runtime Template + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The network configuration for the runtime. + * Structure is documented below. + * + */ + @Import(name="networkSpec") + private @Nullable Output networkSpec; + + /** + * @return The network configuration for the runtime. + * Structure is documented below. + * + */ + public Optional> networkSpec() { + return Optional.ofNullable(this.networkSpec); + } + + /** + * Applies the given Compute Engine tags to the runtime. + * + */ + @Import(name="networkTags") + private @Nullable Output> networkTags; + + /** + * @return Applies the given Compute Engine tags to the runtime. + * + */ + public Optional>> networkTags() { + return Optional.ofNullable(this.networkTags); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Runtime Shielded VM spec. + * Structure is documented below. + * + */ + @Import(name="shieldedVmConfig") + private @Nullable Output shieldedVmConfig; + + /** + * @return Runtime Shielded VM spec. + * Structure is documented below. + * + */ + public Optional> shieldedVmConfig() { + return Optional.ofNullable(this.shieldedVmConfig); + } + + private RuntimeTemplateState() {} + + private RuntimeTemplateState(RuntimeTemplateState $) { + this.dataPersistentDiskSpec = $.dataPersistentDiskSpec; + this.description = $.description; + this.displayName = $.displayName; + this.effectiveLabels = $.effectiveLabels; + this.encryptionSpec = $.encryptionSpec; + this.eucConfig = $.eucConfig; + this.idleShutdownConfig = $.idleShutdownConfig; + this.labels = $.labels; + this.location = $.location; + this.machineSpec = $.machineSpec; + this.name = $.name; + this.networkSpec = $.networkSpec; + this.networkTags = $.networkTags; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.shieldedVmConfig = $.shieldedVmConfig; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RuntimeTemplateState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RuntimeTemplateState $; + + public Builder() { + $ = new RuntimeTemplateState(); + } + + public Builder(RuntimeTemplateState defaults) { + $ = new RuntimeTemplateState(Objects.requireNonNull(defaults)); + } + + /** + * @param dataPersistentDiskSpec The configuration for the data disk of the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder dataPersistentDiskSpec(@Nullable Output dataPersistentDiskSpec) { + $.dataPersistentDiskSpec = dataPersistentDiskSpec; + return this; + } + + /** + * @param dataPersistentDiskSpec The configuration for the data disk of the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder dataPersistentDiskSpec(RuntimeTemplateDataPersistentDiskSpecArgs dataPersistentDiskSpec) { + return dataPersistentDiskSpec(Output.of(dataPersistentDiskSpec)); + } + + /** + * @param description The description of the Runtime Template. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description The description of the Runtime Template. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param displayName Required. The display name of the Runtime Template. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Required. The display name of the Runtime Template. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param encryptionSpec Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder encryptionSpec(@Nullable Output encryptionSpec) { + $.encryptionSpec = encryptionSpec; + return this; + } + + /** + * @param encryptionSpec Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder encryptionSpec(RuntimeTemplateEncryptionSpecArgs encryptionSpec) { + return encryptionSpec(Output.of(encryptionSpec)); + } + + /** + * @param eucConfig EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder eucConfig(@Nullable Output eucConfig) { + $.eucConfig = eucConfig; + return this; + } + + /** + * @param eucConfig EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + * + * @return builder + * + */ + public Builder eucConfig(RuntimeTemplateEucConfigArgs eucConfig) { + return eucConfig(Output.of(eucConfig)); + } + + /** + * @param idleShutdownConfig Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder idleShutdownConfig(@Nullable Output idleShutdownConfig) { + $.idleShutdownConfig = idleShutdownConfig; + return this; + } + + /** + * @param idleShutdownConfig Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder idleShutdownConfig(RuntimeTemplateIdleShutdownConfigArgs idleShutdownConfig) { + return idleShutdownConfig(Output.of(idleShutdownConfig)); + } + + /** + * @param labels Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource: https://cloud.google.com/colab/docs/locations + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param machineSpec 'The machine configuration of the runtime.' + * Structure is documented below. + * + * @return builder + * + */ + public Builder machineSpec(@Nullable Output machineSpec) { + $.machineSpec = machineSpec; + return this; + } + + /** + * @param machineSpec 'The machine configuration of the runtime.' + * Structure is documented below. + * + * @return builder + * + */ + public Builder machineSpec(RuntimeTemplateMachineSpecArgs machineSpec) { + return machineSpec(Output.of(machineSpec)); + } + + /** + * @param name The resource name of the Runtime Template + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the Runtime Template + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param networkSpec The network configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder networkSpec(@Nullable Output networkSpec) { + $.networkSpec = networkSpec; + return this; + } + + /** + * @param networkSpec The network configuration for the runtime. + * Structure is documented below. + * + * @return builder + * + */ + public Builder networkSpec(RuntimeTemplateNetworkSpecArgs networkSpec) { + return networkSpec(Output.of(networkSpec)); + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(@Nullable Output> networkTags) { + $.networkTags = networkTags; + return this; + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(List networkTags) { + return networkTags(Output.of(networkTags)); + } + + /** + * @param networkTags Applies the given Compute Engine tags to the runtime. + * + * @return builder + * + */ + public Builder networkTags(String... networkTags) { + return networkTags(List.of(networkTags)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param shieldedVmConfig Runtime Shielded VM spec. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shieldedVmConfig(@Nullable Output shieldedVmConfig) { + $.shieldedVmConfig = shieldedVmConfig; + return this; + } + + /** + * @param shieldedVmConfig Runtime Shielded VM spec. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shieldedVmConfig(RuntimeTemplateShieldedVmConfigArgs shieldedVmConfig) { + return shieldedVmConfig(Output.of(shieldedVmConfig)); + } + + public RuntimeTemplateState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateDataPersistentDiskSpec.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateDataPersistentDiskSpec.java new file mode 100644 index 0000000000..8585b9969f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateDataPersistentDiskSpec.java @@ -0,0 +1,78 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateDataPersistentDiskSpec { + /** + * @return The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + */ + private @Nullable String diskSizeGb; + /** + * @return The type of the persistent disk. + * + */ + private @Nullable String diskType; + + private RuntimeTemplateDataPersistentDiskSpec() {} + /** + * @return The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + * + */ + public Optional diskSizeGb() { + return Optional.ofNullable(this.diskSizeGb); + } + /** + * @return The type of the persistent disk. + * + */ + public Optional diskType() { + return Optional.ofNullable(this.diskType); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateDataPersistentDiskSpec defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String diskSizeGb; + private @Nullable String diskType; + public Builder() {} + public Builder(RuntimeTemplateDataPersistentDiskSpec defaults) { + Objects.requireNonNull(defaults); + this.diskSizeGb = defaults.diskSizeGb; + this.diskType = defaults.diskType; + } + + @CustomType.Setter + public Builder diskSizeGb(@Nullable String diskSizeGb) { + + this.diskSizeGb = diskSizeGb; + return this; + } + @CustomType.Setter + public Builder diskType(@Nullable String diskType) { + + this.diskType = diskType; + return this; + } + public RuntimeTemplateDataPersistentDiskSpec build() { + final var _resultValue = new RuntimeTemplateDataPersistentDiskSpec(); + _resultValue.diskSizeGb = diskSizeGb; + _resultValue.diskType = diskType; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEncryptionSpec.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEncryptionSpec.java new file mode 100644 index 0000000000..558bba2e15 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEncryptionSpec.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateEncryptionSpec { + /** + * @return The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + */ + private @Nullable String kmsKeyName; + + private RuntimeTemplateEncryptionSpec() {} + /** + * @return The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + * + */ + public Optional kmsKeyName() { + return Optional.ofNullable(this.kmsKeyName); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateEncryptionSpec defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String kmsKeyName; + public Builder() {} + public Builder(RuntimeTemplateEncryptionSpec defaults) { + Objects.requireNonNull(defaults); + this.kmsKeyName = defaults.kmsKeyName; + } + + @CustomType.Setter + public Builder kmsKeyName(@Nullable String kmsKeyName) { + + this.kmsKeyName = kmsKeyName; + return this; + } + public RuntimeTemplateEncryptionSpec build() { + final var _resultValue = new RuntimeTemplateEncryptionSpec(); + _resultValue.kmsKeyName = kmsKeyName; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEucConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEucConfig.java new file mode 100644 index 0000000000..3f2ea722db --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateEucConfig.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateEucConfig { + /** + * @return Disable end user credential access for the runtime. + * + */ + private @Nullable Boolean eucDisabled; + + private RuntimeTemplateEucConfig() {} + /** + * @return Disable end user credential access for the runtime. + * + */ + public Optional eucDisabled() { + return Optional.ofNullable(this.eucDisabled); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateEucConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean eucDisabled; + public Builder() {} + public Builder(RuntimeTemplateEucConfig defaults) { + Objects.requireNonNull(defaults); + this.eucDisabled = defaults.eucDisabled; + } + + @CustomType.Setter + public Builder eucDisabled(@Nullable Boolean eucDisabled) { + + this.eucDisabled = eucDisabled; + return this; + } + public RuntimeTemplateEucConfig build() { + final var _resultValue = new RuntimeTemplateEucConfig(); + _resultValue.eucDisabled = eucDisabled; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateIdleShutdownConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateIdleShutdownConfig.java new file mode 100644 index 0000000000..0b6a8498c0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateIdleShutdownConfig.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateIdleShutdownConfig { + /** + * @return The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + */ + private @Nullable String idleTimeout; + + private RuntimeTemplateIdleShutdownConfig() {} + /** + * @return The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + * + */ + public Optional idleTimeout() { + return Optional.ofNullable(this.idleTimeout); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateIdleShutdownConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String idleTimeout; + public Builder() {} + public Builder(RuntimeTemplateIdleShutdownConfig defaults) { + Objects.requireNonNull(defaults); + this.idleTimeout = defaults.idleTimeout; + } + + @CustomType.Setter + public Builder idleTimeout(@Nullable String idleTimeout) { + + this.idleTimeout = idleTimeout; + return this; + } + public RuntimeTemplateIdleShutdownConfig build() { + final var _resultValue = new RuntimeTemplateIdleShutdownConfig(); + _resultValue.idleTimeout = idleTimeout; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateMachineSpec.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateMachineSpec.java new file mode 100644 index 0000000000..32ebfb2795 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateMachineSpec.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateMachineSpec { + /** + * @return The number of accelerators used by the runtime. + * + */ + private @Nullable Integer acceleratorCount; + /** + * @return The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + */ + private @Nullable String acceleratorType; + /** + * @return The Compute Engine machine type selected for the runtime. + * + */ + private @Nullable String machineType; + + private RuntimeTemplateMachineSpec() {} + /** + * @return The number of accelerators used by the runtime. + * + */ + public Optional acceleratorCount() { + return Optional.ofNullable(this.acceleratorCount); + } + /** + * @return The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + * + */ + public Optional acceleratorType() { + return Optional.ofNullable(this.acceleratorType); + } + /** + * @return The Compute Engine machine type selected for the runtime. + * + */ + public Optional machineType() { + return Optional.ofNullable(this.machineType); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateMachineSpec defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer acceleratorCount; + private @Nullable String acceleratorType; + private @Nullable String machineType; + public Builder() {} + public Builder(RuntimeTemplateMachineSpec defaults) { + Objects.requireNonNull(defaults); + this.acceleratorCount = defaults.acceleratorCount; + this.acceleratorType = defaults.acceleratorType; + this.machineType = defaults.machineType; + } + + @CustomType.Setter + public Builder acceleratorCount(@Nullable Integer acceleratorCount) { + + this.acceleratorCount = acceleratorCount; + return this; + } + @CustomType.Setter + public Builder acceleratorType(@Nullable String acceleratorType) { + + this.acceleratorType = acceleratorType; + return this; + } + @CustomType.Setter + public Builder machineType(@Nullable String machineType) { + + this.machineType = machineType; + return this; + } + public RuntimeTemplateMachineSpec build() { + final var _resultValue = new RuntimeTemplateMachineSpec(); + _resultValue.acceleratorCount = acceleratorCount; + _resultValue.acceleratorType = acceleratorType; + _resultValue.machineType = machineType; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateNetworkSpec.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateNetworkSpec.java new file mode 100644 index 0000000000..8cfaab72a5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateNetworkSpec.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateNetworkSpec { + /** + * @return Enable public internet access for the runtime. + * + */ + private @Nullable Boolean enableInternetAccess; + /** + * @return The name of the VPC that this runtime is in. + * + */ + private @Nullable String network; + /** + * @return The name of the subnetwork that this runtime is in. + * + */ + private @Nullable String subnetwork; + + private RuntimeTemplateNetworkSpec() {} + /** + * @return Enable public internet access for the runtime. + * + */ + public Optional enableInternetAccess() { + return Optional.ofNullable(this.enableInternetAccess); + } + /** + * @return The name of the VPC that this runtime is in. + * + */ + public Optional network() { + return Optional.ofNullable(this.network); + } + /** + * @return The name of the subnetwork that this runtime is in. + * + */ + public Optional subnetwork() { + return Optional.ofNullable(this.subnetwork); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateNetworkSpec defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean enableInternetAccess; + private @Nullable String network; + private @Nullable String subnetwork; + public Builder() {} + public Builder(RuntimeTemplateNetworkSpec defaults) { + Objects.requireNonNull(defaults); + this.enableInternetAccess = defaults.enableInternetAccess; + this.network = defaults.network; + this.subnetwork = defaults.subnetwork; + } + + @CustomType.Setter + public Builder enableInternetAccess(@Nullable Boolean enableInternetAccess) { + + this.enableInternetAccess = enableInternetAccess; + return this; + } + @CustomType.Setter + public Builder network(@Nullable String network) { + + this.network = network; + return this; + } + @CustomType.Setter + public Builder subnetwork(@Nullable String subnetwork) { + + this.subnetwork = subnetwork; + return this; + } + public RuntimeTemplateNetworkSpec build() { + final var _resultValue = new RuntimeTemplateNetworkSpec(); + _resultValue.enableInternetAccess = enableInternetAccess; + _resultValue.network = network; + _resultValue.subnetwork = subnetwork; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateShieldedVmConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateShieldedVmConfig.java new file mode 100644 index 0000000000..f76af28432 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/colab/outputs/RuntimeTemplateShieldedVmConfig.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.colab.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RuntimeTemplateShieldedVmConfig { + /** + * @return Enables secure boot for the runtime. + * + */ + private @Nullable Boolean enableSecureBoot; + + private RuntimeTemplateShieldedVmConfig() {} + /** + * @return Enables secure boot for the runtime. + * + */ + public Optional enableSecureBoot() { + return Optional.ofNullable(this.enableSecureBoot); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RuntimeTemplateShieldedVmConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean enableSecureBoot; + public Builder() {} + public Builder(RuntimeTemplateShieldedVmConfig defaults) { + Objects.requireNonNull(defaults); + this.enableSecureBoot = defaults.enableSecureBoot; + } + + @CustomType.Setter + public Builder enableSecureBoot(@Nullable Boolean enableSecureBoot) { + + this.enableSecureBoot = enableSecureBoot; + return this; + } + public RuntimeTemplateShieldedVmConfig build() { + final var _resultValue = new RuntimeTemplateShieldedVmConfig(); + _resultValue.enableSecureBoot = enableSecureBoot; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachment.java index 4b5e5191c5..c9a153e73d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachment.java @@ -205,7 +205,7 @@ public Output> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ @Export(name="bandwidth", refs={String.class}, tree="[0]") @@ -217,7 +217,7 @@ public Output> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ public Output bandwidth() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachmentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachmentArgs.java index eaa825a02a..8c21bd68f7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachmentArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InterconnectAttachmentArgs.java @@ -42,7 +42,7 @@ public Optional> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ @Import(name="bandwidth") @@ -54,7 +54,7 @@ public Optional> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ public Optional> bandwidth() { @@ -481,7 +481,7 @@ public Builder adminEnabled(Boolean adminEnabled) { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * * @return builder * @@ -497,7 +497,7 @@ public Builder bandwidth(@Nullable Output bandwidth) { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Route.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Route.java index a8a6cb5814..af5dd1565e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Route.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Route.java @@ -511,16 +511,14 @@ public Output nextHopInstanceZone() { return this.nextHopInstanceZone; } /** - * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * */ @Export(name="nextHopInterRegionCost", refs={String.class}, tree="[0]") private Output nextHopInterRegionCost; /** - * @return Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * @return Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * */ public Output nextHopInterRegionCost() { @@ -569,16 +567,14 @@ public Output nextHopNetwork() { return this.nextHopNetwork; } /** - * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * */ @Export(name="nextHopOrigin", refs={String.class}, tree="[0]") private Output nextHopOrigin; /** - * @return Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * @return Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * */ public Output nextHopOrigin() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java index 489157a998..5687637162 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java @@ -965,7 +965,7 @@ public Output> sendSecondaryIpRangeIfEmpty() { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ @Export(name="stackType", refs={String.class}, tree="[0]") @@ -974,7 +974,7 @@ public Output> sendSecondaryIpRangeIfEmpty() { /** * @return The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ public Output stackType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/SubnetworkArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/SubnetworkArgs.java index be2e4839e6..f2f78f9f73 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/SubnetworkArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/SubnetworkArgs.java @@ -374,7 +374,7 @@ public Optional> sendSecondaryIpRangeIfEmpty() { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ @Import(name="stackType") @@ -383,7 +383,7 @@ public Optional> sendSecondaryIpRangeIfEmpty() { /** * @return The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ public Optional> stackType() { @@ -901,7 +901,7 @@ public Builder sendSecondaryIpRangeIfEmpty(Boolean sendSecondaryIpRangeIfEmpty) /** * @param stackType The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * * @return builder * @@ -914,7 +914,7 @@ public Builder stackType(@Nullable Output stackType) { /** * @param stackType The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstance.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstance.java index 06f39faee4..eb15d727c7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstance.java @@ -239,7 +239,7 @@ * * var policyddosprotection = new RegionSecurityPolicy("policyddosprotection", RegionSecurityPolicyArgs.builder() * .region("southamerica-west1") - * .name("tf-test-policyddos_85794") + * .name("tf-test-policyddos_21197") * .description("ddos protection security policy to set target instance") * .type("CLOUD_ARMOR_NETWORK") * .ddosProtectionConfig(RegionSecurityPolicyDdosProtectionConfigArgs.builder() @@ -249,7 +249,7 @@ * * var edgeSecService = new NetworkEdgeSecurityService("edgeSecService", NetworkEdgeSecurityServiceArgs.builder() * .region("southamerica-west1") - * .name("tf-test-edgesec_21197") + * .name("tf-test-edgesec_52865") * .securityPolicy(policyddosprotection.selfLink()) * .build()); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java index 493dbca088..ec62734e1b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java @@ -30,6 +30,8 @@ * To get more information about UrlMap, see: * * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) * * ## Example Usage * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java index ac372f582d..b554248b12 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java @@ -234,14 +234,14 @@ public Optional> securityPolicy() { } /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ @Import(name="stackType") private @Nullable Output stackType; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional> stackType() { @@ -661,7 +661,7 @@ public Builder securityPolicy(String securityPolicy) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * @@ -672,7 +672,7 @@ public Builder stackType(@Nullable Output stackType) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java index a488e90855..6dee8beec8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java @@ -227,14 +227,14 @@ public Optional> queueCount() { } /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ @Import(name="stackType") private @Nullable Output stackType; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional> stackType() { @@ -633,7 +633,7 @@ public Builder queueCount(Integer queueCount) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * @@ -644,7 +644,7 @@ public Builder stackType(@Nullable Output stackType) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InterconnectAttachmentState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InterconnectAttachmentState.java index 580079e2a1..2d6cc46226 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InterconnectAttachmentState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InterconnectAttachmentState.java @@ -42,7 +42,7 @@ public Optional> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ @Import(name="bandwidth") @@ -54,7 +54,7 @@ public Optional> adminEnabled() { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * */ public Optional> bandwidth() { @@ -679,7 +679,7 @@ public Builder adminEnabled(Boolean adminEnabled) { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * * @return builder * @@ -695,7 +695,7 @@ public Builder bandwidth(@Nullable Output bandwidth) { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java index 98144e57a0..95bdede4ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java @@ -192,14 +192,14 @@ public Optional> queueCount() { } /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ @Import(name="stackType") private @Nullable Output stackType; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional> stackType() { @@ -541,7 +541,7 @@ public Builder queueCount(Integer queueCount) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * @@ -552,7 +552,7 @@ public Builder stackType(@Nullable Output stackType) { } /** - * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @param stackType The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouteState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouteState.java index d939fb613f..f0c790b821 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouteState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouteState.java @@ -210,16 +210,14 @@ public Optional> nextHopInstanceZone() { } /** - * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * */ @Import(name="nextHopInterRegionCost") private @Nullable Output nextHopInterRegionCost; /** - * @return Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * @return Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * */ public Optional> nextHopInterRegionCost() { @@ -272,16 +270,14 @@ public Optional> nextHopNetwork() { } /** - * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * */ @Import(name="nextHopOrigin") private @Nullable Output nextHopOrigin; /** - * @return Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * @return Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * */ public Optional> nextHopOrigin() { @@ -655,8 +651,7 @@ public Builder nextHopInstanceZone(String nextHopInstanceZone) { } /** - * @param nextHopInterRegionCost Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * @param nextHopInterRegionCost Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * * @return builder * @@ -667,8 +662,7 @@ public Builder nextHopInterRegionCost(@Nullable Output nextHopInterRegio } /** - * @param nextHopInterRegionCost Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * @param nextHopInterRegionCost Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. * * @return builder * @@ -741,8 +735,7 @@ public Builder nextHopNetwork(String nextHopNetwork) { } /** - * @param nextHopOrigin Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * @param nextHopOrigin Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * * @return builder * @@ -753,8 +746,7 @@ public Builder nextHopOrigin(@Nullable Output nextHopOrigin) { } /** - * @param nextHopOrigin Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * @param nextHopOrigin Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java index 790cb697a1..b84f28cbad 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java @@ -474,7 +474,7 @@ public Optional> sendSecondaryIpRangeIfEmpty() { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ @Import(name="stackType") @@ -483,7 +483,7 @@ public Optional> sendSecondaryIpRangeIfEmpty() { /** * @return The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * */ public Optional> stackType() { @@ -1159,7 +1159,7 @@ public Builder sendSecondaryIpRangeIfEmpty(Boolean sendSecondaryIpRangeIfEmpty) /** * @param stackType The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * * @return builder * @@ -1172,7 +1172,7 @@ public Builder stackType(@Nullable Output stackType) { /** * @param stackType The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java index 3d8a6b9d54..0898e4d80e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java @@ -91,7 +91,7 @@ public final class InstanceNetworkInterface { */ private @Nullable String securityPolicy; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ private @Nullable String stackType; @@ -217,7 +217,7 @@ public Optional securityPolicy() { return Optional.ofNullable(this.securityPolicy); } /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional stackType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java index f103d4d573..f3d9f97f6b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java @@ -90,7 +90,7 @@ public final class InstanceTemplateNetworkInterface { */ private @Nullable Integer queueCount; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ private @Nullable String stackType; @@ -207,7 +207,7 @@ public Optional queueCount() { return Optional.ofNullable(this.queueCount); } /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional stackType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java index 33149008d4..04ab81441b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java @@ -75,7 +75,7 @@ public final class RegionInstanceTemplateNetworkInterface { */ private @Nullable Integer queueCount; /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ private @Nullable String stackType; @@ -175,7 +175,7 @@ public Optional queueCount() { return Optional.ofNullable(this.queueCount); } /** - * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * @return The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. * */ public Optional stackType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/databasemigrationservice/ConnectionProfile.java b/sdk/java/src/main/java/com/pulumi/gcp/databasemigrationservice/ConnectionProfile.java index 3bff4b79b0..5a16a17b83 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/databasemigrationservice/ConnectionProfile.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/databasemigrationservice/ConnectionProfile.java @@ -352,11 +352,11 @@ * .displayName("my-profileid_display") * .labels(Map.of("foo", "bar")) * .alloydb(ConnectionProfileAlloydbArgs.builder() - * .clusterId("tf-test-dbmsalloycluster_52865") + * .clusterId("tf-test-dbmsalloycluster_85840") * .settings(ConnectionProfileAlloydbSettingsArgs.builder() * .initialUser(ConnectionProfileAlloydbSettingsInitialUserArgs.builder() - * .user("alloyuser_85840") - * .password("alloypass_60302") + * .user("alloyuser_60302") + * .password("alloypass_22811") * .build()) * .vpcNetwork(default_.id()) * .labels(Map.of("alloyfoo", "alloybar")) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataplex/EntryType.java b/sdk/java/src/main/java/com/pulumi/gcp/dataplex/EntryType.java index 7aeb5f4494..c4008cc56e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataplex/EntryType.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataplex/EntryType.java @@ -87,7 +87,7 @@ * * public static void stack(Context ctx) { * var testEntryTypeFull = new AspectType("testEntryTypeFull", AspectTypeArgs.builder() - * .aspectTypeId("tf-test-aspect-type_22811") + * .aspectTypeId("tf-test-aspect-type_91042") * .location("us-central1") * .project("my-project-name") * .metadataTemplate(""" diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataplex/Task.java b/sdk/java/src/main/java/com/pulumi/gcp/dataplex/Task.java index 980655d6d6..597c996ebf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataplex/Task.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataplex/Task.java @@ -67,13 +67,13 @@ * final var project = OrganizationsFunctions.getProject(); * * var example = new Lake("example", LakeArgs.builder() - * .name("tf-test-lake_91042") + * .name("tf-test-lake_72490") * .location("us-central1") * .project("my-project-name") * .build()); * * var exampleTask = new Task("exampleTask", TaskArgs.builder() - * .taskId("tf-test-task_72490") + * .taskId("tf-test-task_89605") * .location("us-central1") * .lake(example.name()) * .description("Test Task Basic") @@ -143,20 +143,20 @@ * public static void stack(Context ctx) }{{@code * // VPC network * var default_ = new Network("default", NetworkArgs.builder() - * .name("tf-test-workstation-cluster_89605") + * .name("tf-test-workstation-cluster_56730") * .autoCreateSubnetworks(true) * .build()); * * final var project = OrganizationsFunctions.getProject(); * * var exampleSpark = new Lake("exampleSpark", LakeArgs.builder() - * .name("tf-test-lake_56730") + * .name("tf-test-lake_95154") * .location("us-central1") * .project("my-project-name") * .build()); * * var exampleSparkTask = new Task("exampleSparkTask", TaskArgs.builder() - * .taskId("tf-test-task_95154") + * .taskId("tf-test-task_64336") * .location("us-central1") * .lake(exampleSpark.name()) * .triggerSpec(TaskTriggerSpecArgs.builder() @@ -240,20 +240,20 @@ * public static void stack(Context ctx) }{{@code * // VPC network * var default_ = new Network("default", NetworkArgs.builder() - * .name("tf-test-workstation-cluster_64336") + * .name("tf-test-workstation-cluster_34962") * .autoCreateSubnetworks(true) * .build()); * * final var project = OrganizationsFunctions.getProject(); * * var exampleNotebook = new Lake("exampleNotebook", LakeArgs.builder() - * .name("tf-test-lake_34962") + * .name("tf-test-lake_74000") * .location("us-central1") * .project("my-project-name") * .build()); * * var exampleNotebookTask = new Task("exampleNotebookTask", TaskArgs.builder() - * .taskId("tf-test-task_74000") + * .taskId("tf-test-task_75125") * .location("us-central1") * .lake(exampleNotebook.name()) * .triggerSpec(TaskTriggerSpecArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java index 787639e293..351c730c7b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java @@ -66,7 +66,7 @@ * * public static void stack(Context ctx) { * var exampleBatchSpark = new Batch("exampleBatchSpark", BatchArgs.builder() - * .batchId("tf-test-batch_75125") + * .batchId("tf-test-batch_88722") * .location("us-central1") * .labels(Map.of("batch_test", "terraform")) * .runtimeConfig(BatchRuntimeConfigArgs.builder() @@ -274,7 +274,7 @@ * * public static void stack(Context ctx) { * var exampleBatchSparsql = new Batch("exampleBatchSparsql", BatchArgs.builder() - * .batchId("tf-test-batch_88722") + * .batchId("tf-test-batch_39249") * .location("us-central1") * .runtimeConfig(BatchRuntimeConfigArgs.builder() * .properties(Map.ofEntries( @@ -329,7 +329,7 @@ * * public static void stack(Context ctx) { * var exampleBatchPyspark = new Batch("exampleBatchPyspark", BatchArgs.builder() - * .batchId("tf-test-batch_39249") + * .batchId("tf-test-batch_74391") * .location("us-central1") * .runtimeConfig(BatchRuntimeConfigArgs.builder() * .properties(Map.ofEntries( @@ -390,7 +390,7 @@ * * public static void stack(Context ctx) { * var exampleBatchSparkr = new Batch("exampleBatchSparkr", BatchArgs.builder() - * .batchId("tf-test-batch_74391") + * .batchId("tf-test-batch_16511") * .location("us-central1") * .labels(Map.of("batch_test", "terraform")) * .runtimeConfig(BatchRuntimeConfigArgs.builder() @@ -448,7 +448,7 @@ * * public static void stack(Context ctx) { * var exampleBatchAutotuning = new Batch("exampleBatchAutotuning", BatchArgs.builder() - * .batchId("tf-test-batch_16511") + * .batchId("tf-test-batch_8493") * .location("us-central1") * .labels(Map.of("batch_test", "terraform")) * .runtimeConfig(BatchRuntimeConfigArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStore.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStore.java index 82e403452f..d92b8326b4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStore.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStore.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.discoveryengine.DataStoreArgs; import com.pulumi.gcp.discoveryengine.inputs.DataStoreState; +import com.pulumi.gcp.discoveryengine.outputs.DataStoreAdvancedSiteSearchConfig; import com.pulumi.gcp.discoveryengine.outputs.DataStoreDocumentProcessingConfig; import java.lang.Boolean; import java.lang.String; @@ -125,6 +126,52 @@ * } * * <!--End PulumiCodeChooser --> + * ### Discoveryengine Datastore Advanced Site Search Config + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.discoveryengine.DataStore;
+ * import com.pulumi.gcp.discoveryengine.DataStoreArgs;
+ * import com.pulumi.gcp.discoveryengine.inputs.DataStoreAdvancedSiteSearchConfigArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var advancedSiteSearchConfig = new DataStore("advancedSiteSearchConfig", DataStoreArgs.builder()
+ *             .location("global")
+ *             .dataStoreId("data-store-id")
+ *             .displayName("tf-test-advanced-site-search-config-datastore")
+ *             .industryVertical("GENERIC")
+ *             .contentConfig("PUBLIC_WEBSITE")
+ *             .solutionTypes("SOLUTION_TYPE_CHAT")
+ *             .createAdvancedSiteSearch(true)
+ *             .skipDefaultSchemaCreation(false)
+ *             .advancedSiteSearchConfig(DataStoreAdvancedSiteSearchConfigArgs.builder()
+ *                 .disableInitialIndex(true)
+ *                 .disableAutomaticRefresh(true)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * @@ -153,6 +200,22 @@ */ @ResourceType(type="gcp:discoveryengine/dataStore:DataStore") public class DataStore extends com.pulumi.resources.CustomResource { + /** + * Configuration data for advance site search. + * Structure is documented below. + * + */ + @Export(name="advancedSiteSearchConfig", refs={DataStoreAdvancedSiteSearchConfig.class}, tree="[0]") + private Output advancedSiteSearchConfig; + + /** + * @return Configuration data for advance site search. + * Structure is documented below. + * + */ + public Output> advancedSiteSearchConfig() { + return Codegen.optional(this.advancedSiteSearchConfig); + } /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStoreArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStoreArgs.java index 09d8bf521d..0e1c44e6f5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStoreArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/DataStoreArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.discoveryengine.inputs.DataStoreAdvancedSiteSearchConfigArgs; import com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigArgs; import java.lang.Boolean; import java.lang.String; @@ -19,6 +20,23 @@ public final class DataStoreArgs extends com.pulumi.resources.ResourceArgs { public static final DataStoreArgs Empty = new DataStoreArgs(); + /** + * Configuration data for advance site search. + * Structure is documented below. + * + */ + @Import(name="advancedSiteSearchConfig") + private @Nullable Output advancedSiteSearchConfig; + + /** + * @return Configuration data for advance site search. + * Structure is documented below. + * + */ + public Optional> advancedSiteSearchConfig() { + return Optional.ofNullable(this.advancedSiteSearchConfig); + } + /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -206,6 +224,7 @@ public Optional>> solutionTypes() { private DataStoreArgs() {} private DataStoreArgs(DataStoreArgs $) { + this.advancedSiteSearchConfig = $.advancedSiteSearchConfig; this.contentConfig = $.contentConfig; this.createAdvancedSiteSearch = $.createAdvancedSiteSearch; this.dataStoreId = $.dataStoreId; @@ -236,6 +255,29 @@ public Builder(DataStoreArgs defaults) { $ = new DataStoreArgs(Objects.requireNonNull(defaults)); } + /** + * @param advancedSiteSearchConfig Configuration data for advance site search. + * Structure is documented below. + * + * @return builder + * + */ + public Builder advancedSiteSearchConfig(@Nullable Output advancedSiteSearchConfig) { + $.advancedSiteSearchConfig = advancedSiteSearchConfig; + return this; + } + + /** + * @param advancedSiteSearchConfig Configuration data for advance site search. + * Structure is documented below. + * + * @return builder + * + */ + public Builder advancedSiteSearchConfig(DataStoreAdvancedSiteSearchConfigArgs advancedSiteSearchConfig) { + return advancedSiteSearchConfig(Output.of(advancedSiteSearchConfig)); + } + /** * @param contentConfig The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreAdvancedSiteSearchConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreAdvancedSiteSearchConfigArgs.java new file mode 100644 index 0000000000..1bf77915a5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreAdvancedSiteSearchConfigArgs.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.discoveryengine.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DataStoreAdvancedSiteSearchConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final DataStoreAdvancedSiteSearchConfigArgs Empty = new DataStoreAdvancedSiteSearchConfigArgs(); + + /** + * If set true, automatic refresh is disabled for the DataStore. + * + */ + @Import(name="disableAutomaticRefresh") + private @Nullable Output disableAutomaticRefresh; + + /** + * @return If set true, automatic refresh is disabled for the DataStore. + * + */ + public Optional> disableAutomaticRefresh() { + return Optional.ofNullable(this.disableAutomaticRefresh); + } + + /** + * If set true, initial indexing is disabled for the DataStore. + * + */ + @Import(name="disableInitialIndex") + private @Nullable Output disableInitialIndex; + + /** + * @return If set true, initial indexing is disabled for the DataStore. + * + */ + public Optional> disableInitialIndex() { + return Optional.ofNullable(this.disableInitialIndex); + } + + private DataStoreAdvancedSiteSearchConfigArgs() {} + + private DataStoreAdvancedSiteSearchConfigArgs(DataStoreAdvancedSiteSearchConfigArgs $) { + this.disableAutomaticRefresh = $.disableAutomaticRefresh; + this.disableInitialIndex = $.disableInitialIndex; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DataStoreAdvancedSiteSearchConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DataStoreAdvancedSiteSearchConfigArgs $; + + public Builder() { + $ = new DataStoreAdvancedSiteSearchConfigArgs(); + } + + public Builder(DataStoreAdvancedSiteSearchConfigArgs defaults) { + $ = new DataStoreAdvancedSiteSearchConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param disableAutomaticRefresh If set true, automatic refresh is disabled for the DataStore. + * + * @return builder + * + */ + public Builder disableAutomaticRefresh(@Nullable Output disableAutomaticRefresh) { + $.disableAutomaticRefresh = disableAutomaticRefresh; + return this; + } + + /** + * @param disableAutomaticRefresh If set true, automatic refresh is disabled for the DataStore. + * + * @return builder + * + */ + public Builder disableAutomaticRefresh(Boolean disableAutomaticRefresh) { + return disableAutomaticRefresh(Output.of(disableAutomaticRefresh)); + } + + /** + * @param disableInitialIndex If set true, initial indexing is disabled for the DataStore. + * + * @return builder + * + */ + public Builder disableInitialIndex(@Nullable Output disableInitialIndex) { + $.disableInitialIndex = disableInitialIndex; + return this; + } + + /** + * @param disableInitialIndex If set true, initial indexing is disabled for the DataStore. + * + * @return builder + * + */ + public Builder disableInitialIndex(Boolean disableInitialIndex) { + return disableInitialIndex(Output.of(disableInitialIndex)); + } + + public DataStoreAdvancedSiteSearchConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreState.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreState.java index 53cd222d1a..76fd73a7ff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/DataStoreState.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.discoveryengine.inputs.DataStoreAdvancedSiteSearchConfigArgs; import com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigArgs; import java.lang.Boolean; import java.lang.String; @@ -18,6 +19,23 @@ public final class DataStoreState extends com.pulumi.resources.ResourceArgs { public static final DataStoreState Empty = new DataStoreState(); + /** + * Configuration data for advance site search. + * Structure is documented below. + * + */ + @Import(name="advancedSiteSearchConfig") + private @Nullable Output advancedSiteSearchConfig; + + /** + * @return Configuration data for advance site search. + * Structure is documented below. + * + */ + public Optional> advancedSiteSearchConfig() { + return Optional.ofNullable(this.advancedSiteSearchConfig); + } + /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -256,6 +274,7 @@ public Optional>> solutionTypes() { private DataStoreState() {} private DataStoreState(DataStoreState $) { + this.advancedSiteSearchConfig = $.advancedSiteSearchConfig; this.contentConfig = $.contentConfig; this.createAdvancedSiteSearch = $.createAdvancedSiteSearch; this.createTime = $.createTime; @@ -289,6 +308,29 @@ public Builder(DataStoreState defaults) { $ = new DataStoreState(Objects.requireNonNull(defaults)); } + /** + * @param advancedSiteSearchConfig Configuration data for advance site search. + * Structure is documented below. + * + * @return builder + * + */ + public Builder advancedSiteSearchConfig(@Nullable Output advancedSiteSearchConfig) { + $.advancedSiteSearchConfig = advancedSiteSearchConfig; + return this; + } + + /** + * @param advancedSiteSearchConfig Configuration data for advance site search. + * Structure is documented below. + * + * @return builder + * + */ + public Builder advancedSiteSearchConfig(DataStoreAdvancedSiteSearchConfigArgs advancedSiteSearchConfig) { + return advancedSiteSearchConfig(Output.of(advancedSiteSearchConfig)); + } + /** * @param contentConfig The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/outputs/DataStoreAdvancedSiteSearchConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/outputs/DataStoreAdvancedSiteSearchConfig.java new file mode 100644 index 0000000000..6ab5060854 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/outputs/DataStoreAdvancedSiteSearchConfig.java @@ -0,0 +1,78 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.discoveryengine.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class DataStoreAdvancedSiteSearchConfig { + /** + * @return If set true, automatic refresh is disabled for the DataStore. + * + */ + private @Nullable Boolean disableAutomaticRefresh; + /** + * @return If set true, initial indexing is disabled for the DataStore. + * + */ + private @Nullable Boolean disableInitialIndex; + + private DataStoreAdvancedSiteSearchConfig() {} + /** + * @return If set true, automatic refresh is disabled for the DataStore. + * + */ + public Optional disableAutomaticRefresh() { + return Optional.ofNullable(this.disableAutomaticRefresh); + } + /** + * @return If set true, initial indexing is disabled for the DataStore. + * + */ + public Optional disableInitialIndex() { + return Optional.ofNullable(this.disableInitialIndex); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(DataStoreAdvancedSiteSearchConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean disableAutomaticRefresh; + private @Nullable Boolean disableInitialIndex; + public Builder() {} + public Builder(DataStoreAdvancedSiteSearchConfig defaults) { + Objects.requireNonNull(defaults); + this.disableAutomaticRefresh = defaults.disableAutomaticRefresh; + this.disableInitialIndex = defaults.disableInitialIndex; + } + + @CustomType.Setter + public Builder disableAutomaticRefresh(@Nullable Boolean disableAutomaticRefresh) { + + this.disableAutomaticRefresh = disableAutomaticRefresh; + return this; + } + @CustomType.Setter + public Builder disableInitialIndex(@Nullable Boolean disableInitialIndex) { + + this.disableInitialIndex = disableInitialIndex; + return this; + } + public DataStoreAdvancedSiteSearchConfig build() { + final var _resultValue = new DataStoreAdvancedSiteSearchConfig(); + _resultValue.disableAutomaticRefresh = disableAutomaticRefresh; + _resultValue.disableInitialIndex = disableInitialIndex; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachment.java new file mode 100644 index 0000000000..97bacfa99d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachment.java @@ -0,0 +1,419 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.edgenetwork; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.edgenetwork.InterconnectAttachmentArgs; +import com.pulumi.gcp.edgenetwork.inputs.InterconnectAttachmentState; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. + * + * To get more information about InterconnectAttachment, see: + * + * * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) + * * How-to Guides + * * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) + * + * ## Example Usage + * + * ### Edgenetwork Interconnect Attachment + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.edgenetwork.Network;
+ * import com.pulumi.gcp.edgenetwork.NetworkArgs;
+ * import com.pulumi.gcp.edgenetwork.InterconnectAttachment;
+ * import com.pulumi.gcp.edgenetwork.InterconnectAttachmentArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var exampleNetwork = new Network("exampleNetwork", NetworkArgs.builder()
+ *             .networkId("example-network")
+ *             .location("us-west1")
+ *             .zone("")
+ *             .description("Example network.")
+ *             .mtu(9000)
+ *             .build());
+ * 
+ *         var exampleInterconnectAttachment = new InterconnectAttachment("exampleInterconnectAttachment", InterconnectAttachmentArgs.builder()
+ *             .interconnectAttachmentId("example-interconnect-attachment")
+ *             .location("us-west1")
+ *             .zone("")
+ *             .description("Example interconnect attachment.")
+ *             .network(exampleNetwork.id())
+ *             .interconnect("11111111-2222-3333-4444-555555555555")
+ *             .vlanId(55)
+ *             .mtu(9000)
+ *             .labels(Map.of("environment", "dev"))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * InterconnectAttachment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` + * + * * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` + * + * * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` + * + * * `{{location}}/{{interconnect_attachment_id}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} + * ``` + * + */ +@ResourceType(type="gcp:edgenetwork/interconnectAttachment:InterconnectAttachment") +public class InterconnectAttachment extends com.pulumi.resources.CustomResource { + /** + * The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Export(name="description", refs={String.class}, tree="[0]") + private Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Output> description() { + return Codegen.optional(this.description); + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + @Export(name="interconnect", refs={String.class}, tree="[0]") + private Output interconnect; + + /** + * @return The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + public Output interconnect() { + return this.interconnect; + } + /** + * A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + @Export(name="interconnectAttachmentId", refs={String.class}, tree="[0]") + private Output interconnectAttachmentId; + + /** + * @return A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + public Output interconnectAttachmentId() { + return this.interconnectAttachmentId; + } + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + public Output location() { + return this.location; + } + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + @Export(name="mtu", refs={Integer.class}, tree="[0]") + private Output mtu; + + /** + * @return IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + public Output> mtu() { + return Codegen.optional(this.mtu); + } + /** + * The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + @Export(name="network", refs={String.class}, tree="[0]") + private Output network; + + /** + * @return The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + public Output network() { + return this.network; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + public Output updateTime() { + return this.updateTime; + } + /** + * VLAN ID provided by user. Must be site-wise unique. + * + */ + @Export(name="vlanId", refs={Integer.class}, tree="[0]") + private Output vlanId; + + /** + * @return VLAN ID provided by user. Must be site-wise unique. + * + */ + public Output vlanId() { + return this.vlanId; + } + /** + * The name of the target Distributed Cloud Edge zone. + * + */ + @Export(name="zone", refs={String.class}, tree="[0]") + private Output zone; + + /** + * @return The name of the target Distributed Cloud Edge zone. + * + */ + public Output zone() { + return this.zone; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public InterconnectAttachment(java.lang.String name) { + this(name, InterconnectAttachmentArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public InterconnectAttachment(java.lang.String name, InterconnectAttachmentArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public InterconnectAttachment(java.lang.String name, InterconnectAttachmentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private InterconnectAttachment(java.lang.String name, Output id, @Nullable InterconnectAttachmentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:edgenetwork/interconnectAttachment:InterconnectAttachment", name, state, makeResourceOptions(options, id), false); + } + + private static InterconnectAttachmentArgs makeArgs(InterconnectAttachmentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? InterconnectAttachmentArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static InterconnectAttachment get(java.lang.String name, Output id, @Nullable InterconnectAttachmentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new InterconnectAttachment(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachmentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachmentArgs.java new file mode 100644 index 0000000000..c894471108 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/InterconnectAttachmentArgs.java @@ -0,0 +1,465 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.edgenetwork; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class InterconnectAttachmentArgs extends com.pulumi.resources.ResourceArgs { + + public static final InterconnectAttachmentArgs Empty = new InterconnectAttachmentArgs(); + + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + @Import(name="interconnect", required=true) + private Output interconnect; + + /** + * @return The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + public Output interconnect() { + return this.interconnect; + } + + /** + * A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + @Import(name="interconnectAttachmentId", required=true) + private Output interconnectAttachmentId; + + /** + * @return A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + public Output interconnectAttachmentId() { + return this.interconnectAttachmentId; + } + + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + public Output location() { + return this.location; + } + + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + @Import(name="mtu") + private @Nullable Output mtu; + + /** + * @return IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + public Optional> mtu() { + return Optional.ofNullable(this.mtu); + } + + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + @Import(name="network", required=true) + private Output network; + + /** + * @return The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + public Output network() { + return this.network; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * VLAN ID provided by user. Must be site-wise unique. + * + */ + @Import(name="vlanId", required=true) + private Output vlanId; + + /** + * @return VLAN ID provided by user. Must be site-wise unique. + * + */ + public Output vlanId() { + return this.vlanId; + } + + /** + * The name of the target Distributed Cloud Edge zone. + * + */ + @Import(name="zone", required=true) + private Output zone; + + /** + * @return The name of the target Distributed Cloud Edge zone. + * + */ + public Output zone() { + return this.zone; + } + + private InterconnectAttachmentArgs() {} + + private InterconnectAttachmentArgs(InterconnectAttachmentArgs $) { + this.description = $.description; + this.interconnect = $.interconnect; + this.interconnectAttachmentId = $.interconnectAttachmentId; + this.labels = $.labels; + this.location = $.location; + this.mtu = $.mtu; + this.network = $.network; + this.project = $.project; + this.vlanId = $.vlanId; + this.zone = $.zone; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InterconnectAttachmentArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InterconnectAttachmentArgs $; + + public Builder() { + $ = new InterconnectAttachmentArgs(); + } + + public Builder(InterconnectAttachmentArgs defaults) { + $ = new InterconnectAttachmentArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param interconnect The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + * @return builder + * + */ + public Builder interconnect(Output interconnect) { + $.interconnect = interconnect; + return this; + } + + /** + * @param interconnect The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + * @return builder + * + */ + public Builder interconnect(String interconnect) { + return interconnect(Output.of(interconnect)); + } + + /** + * @param interconnectAttachmentId A unique ID that identifies this interconnect attachment. + * + * *** + * + * @return builder + * + */ + public Builder interconnectAttachmentId(Output interconnectAttachmentId) { + $.interconnectAttachmentId = interconnectAttachmentId; + return this; + } + + /** + * @param interconnectAttachmentId A unique ID that identifies this interconnect attachment. + * + * *** + * + * @return builder + * + */ + public Builder interconnectAttachmentId(String interconnectAttachmentId) { + return interconnectAttachmentId(Output.of(interconnectAttachmentId)); + } + + /** + * @param labels Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mtu IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + * @return builder + * + */ + public Builder mtu(@Nullable Output mtu) { + $.mtu = mtu; + return this; + } + + /** + * @param mtu IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + * @return builder + * + */ + public Builder mtu(Integer mtu) { + return mtu(Output.of(mtu)); + } + + /** + * @param network The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + * @return builder + * + */ + public Builder network(Output network) { + $.network = network; + return this; + } + + /** + * @param network The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param vlanId VLAN ID provided by user. Must be site-wise unique. + * + * @return builder + * + */ + public Builder vlanId(Output vlanId) { + $.vlanId = vlanId; + return this; + } + + /** + * @param vlanId VLAN ID provided by user. Must be site-wise unique. + * + * @return builder + * + */ + public Builder vlanId(Integer vlanId) { + return vlanId(Output.of(vlanId)); + } + + /** + * @param zone The name of the target Distributed Cloud Edge zone. + * + * @return builder + * + */ + public Builder zone(Output zone) { + $.zone = zone; + return this; + } + + /** + * @param zone The name of the target Distributed Cloud Edge zone. + * + * @return builder + * + */ + public Builder zone(String zone) { + return zone(Output.of(zone)); + } + + public InterconnectAttachmentArgs build() { + if ($.interconnect == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "interconnect"); + } + if ($.interconnectAttachmentId == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "interconnectAttachmentId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "location"); + } + if ($.network == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "network"); + } + if ($.vlanId == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "vlanId"); + } + if ($.zone == null) { + throw new MissingRequiredPropertyException("InterconnectAttachmentArgs", "zone"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/inputs/InterconnectAttachmentState.java b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/inputs/InterconnectAttachmentState.java new file mode 100644 index 0000000000..dd2e3b2d4c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/edgenetwork/inputs/InterconnectAttachmentState.java @@ -0,0 +1,655 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.edgenetwork.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class InterconnectAttachmentState extends com.pulumi.resources.ResourceArgs { + + public static final InterconnectAttachmentState Empty = new InterconnectAttachmentState(); + + /** + * The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * A free-text description of the resource. Max length 1024 characters. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return A free-text description of the resource. Max length 1024 characters. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + @Import(name="interconnect") + private @Nullable Output interconnect; + + /** + * @return The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + */ + public Optional> interconnect() { + return Optional.ofNullable(this.interconnect); + } + + /** + * A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + @Import(name="interconnectAttachmentId") + private @Nullable Output interconnectAttachmentId; + + /** + * @return A unique ID that identifies this interconnect attachment. + * + * *** + * + */ + public Optional> interconnectAttachmentId() { + return Optional.ofNullable(this.interconnectAttachmentId); + } + + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + @Import(name="mtu") + private @Nullable Output mtu; + + /** + * @return IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + */ + public Optional> mtu() { + return Optional.ofNullable(this.mtu); + } + + /** + * The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + @Import(name="network") + private @Nullable Output network; + + /** + * @return The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + */ + public Optional> network() { + return Optional.ofNullable(this.network); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + /** + * VLAN ID provided by user. Must be site-wise unique. + * + */ + @Import(name="vlanId") + private @Nullable Output vlanId; + + /** + * @return VLAN ID provided by user. Must be site-wise unique. + * + */ + public Optional> vlanId() { + return Optional.ofNullable(this.vlanId); + } + + /** + * The name of the target Distributed Cloud Edge zone. + * + */ + @Import(name="zone") + private @Nullable Output zone; + + /** + * @return The name of the target Distributed Cloud Edge zone. + * + */ + public Optional> zone() { + return Optional.ofNullable(this.zone); + } + + private InterconnectAttachmentState() {} + + private InterconnectAttachmentState(InterconnectAttachmentState $) { + this.createTime = $.createTime; + this.description = $.description; + this.effectiveLabels = $.effectiveLabels; + this.interconnect = $.interconnect; + this.interconnectAttachmentId = $.interconnectAttachmentId; + this.labels = $.labels; + this.location = $.location; + this.mtu = $.mtu; + this.name = $.name; + this.network = $.network; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.updateTime = $.updateTime; + this.vlanId = $.vlanId; + this.zone = $.zone; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(InterconnectAttachmentState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private InterconnectAttachmentState $; + + public Builder() { + $ = new InterconnectAttachmentState(); + } + + public Builder(InterconnectAttachmentState defaults) { + $ = new InterconnectAttachmentState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description A free-text description of the resource. Max length 1024 characters. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param interconnect The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + * @return builder + * + */ + public Builder interconnect(@Nullable Output interconnect) { + $.interconnect = interconnect; + return this; + } + + /** + * @param interconnect The ID of the underlying interconnect that this attachment's traffic will traverse through. + * + * @return builder + * + */ + public Builder interconnect(String interconnect) { + return interconnect(Output.of(interconnect)); + } + + /** + * @param interconnectAttachmentId A unique ID that identifies this interconnect attachment. + * + * *** + * + * @return builder + * + */ + public Builder interconnectAttachmentId(@Nullable Output interconnectAttachmentId) { + $.interconnectAttachmentId = interconnectAttachmentId; + return this; + } + + /** + * @param interconnectAttachmentId A unique ID that identifies this interconnect attachment. + * + * *** + * + * @return builder + * + */ + public Builder interconnectAttachmentId(String interconnectAttachmentId) { + return interconnectAttachmentId(Output.of(interconnectAttachmentId)); + } + + /** + * @param labels Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mtu IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + * @return builder + * + */ + public Builder mtu(@Nullable Output mtu) { + $.mtu = mtu; + return this; + } + + /** + * @param mtu IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + * + * @return builder + * + */ + public Builder mtu(Integer mtu) { + return mtu(Output.of(mtu)); + } + + /** + * @param name The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + * @return builder + * + */ + public Builder network(@Nullable Output network) { + $.network = network; + return this; + } + + /** + * @param network The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param updateTime The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + /** + * @param vlanId VLAN ID provided by user. Must be site-wise unique. + * + * @return builder + * + */ + public Builder vlanId(@Nullable Output vlanId) { + $.vlanId = vlanId; + return this; + } + + /** + * @param vlanId VLAN ID provided by user. Must be site-wise unique. + * + * @return builder + * + */ + public Builder vlanId(Integer vlanId) { + return vlanId(Output.of(vlanId)); + } + + /** + * @param zone The name of the target Distributed Cloud Edge zone. + * + * @return builder + * + */ + public Builder zone(@Nullable Output zone) { + $.zone = zone; + return this; + } + + /** + * @param zone The name of the target Distributed Cloud Edge zone. + * + * @return builder + * + */ + public Builder zone(String zone) { + return zone(Output.of(zone)); + } + + public InterconnectAttachmentState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java index a8c5b8052d..d66fcffcc2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java @@ -74,7 +74,7 @@ * var basic = new Field("basic", FieldArgs.builder() * .project("my-project-name") * .database(database.name()) - * .collection("chatrooms__8493") + * .collection("chatrooms__9106") * .field("basic") * .indexConfig(FieldIndexConfigArgs.builder() * .indexes( @@ -185,7 +185,7 @@ * var matchOverride = new Field("matchOverride", FieldArgs.builder() * .project("my-project-name") * .database(database.name()) - * .collection("chatrooms__9106") + * .collection("chatrooms__27169") * .field("field_with_same_configuration_as_ancestor") * .indexConfig(FieldIndexConfigArgs.builder() * .indexes( diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java index 24cbbf494f..3685937fd7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.gemini.CodeRepositoryIndexArgs; import com.pulumi.gcp.gemini.inputs.CodeRepositoryIndexState; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -129,6 +130,20 @@ public Output createTime() { public Output> effectiveLabels() { return this.effectiveLabels; } + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + @Export(name="forceDestroy", refs={Boolean.class}, tree="[0]") + private Output forceDestroy; + + /** + * @return If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + public Output> forceDestroy() { + return Codegen.optional(this.forceDestroy); + } /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java index c76e2fd135..e62e7926c5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -36,6 +37,21 @@ public Output codeRepositoryIndexId() { return this.codeRepositoryIndexId; } + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + @Import(name="forceDestroy") + private @Nullable Output forceDestroy; + + /** + * @return If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + public Optional> forceDestroy() { + return Optional.ofNullable(this.forceDestroy); + } + /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -108,6 +124,7 @@ private CodeRepositoryIndexArgs() {} private CodeRepositoryIndexArgs(CodeRepositoryIndexArgs $) { this.codeRepositoryIndexId = $.codeRepositoryIndexId; + this.forceDestroy = $.forceDestroy; this.kmsKey = $.kmsKey; this.labels = $.labels; this.location = $.location; @@ -157,6 +174,27 @@ public Builder codeRepositoryIndexId(String codeRepositoryIndexId) { return codeRepositoryIndexId(Output.of(codeRepositoryIndexId)); } + /** + * @param forceDestroy If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + * @return builder + * + */ + public Builder forceDestroy(@Nullable Output forceDestroy) { + $.forceDestroy = forceDestroy; + return this; + } + + /** + * @param forceDestroy If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + * @return builder + * + */ + public Builder forceDestroy(Boolean forceDestroy) { + return forceDestroy(Output.of(forceDestroy)); + } + /** * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java index 172b321cbc..2f3265c48d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -65,6 +66,21 @@ public Optional>> effectiveLabels() { return Optional.ofNullable(this.effectiveLabels); } + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + @Import(name="forceDestroy") + private @Nullable Output forceDestroy; + + /** + * @return If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + */ + public Optional> forceDestroy() { + return Optional.ofNullable(this.forceDestroy); + } + /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -213,6 +229,7 @@ private CodeRepositoryIndexState(CodeRepositoryIndexState $) { this.codeRepositoryIndexId = $.codeRepositoryIndexId; this.createTime = $.createTime; this.effectiveLabels = $.effectiveLabels; + this.forceDestroy = $.forceDestroy; this.kmsKey = $.kmsKey; this.labels = $.labels; this.location = $.location; @@ -308,6 +325,27 @@ public Builder effectiveLabels(Map effectiveLabels) { return effectiveLabels(Output.of(effectiveLabels)); } + /** + * @param forceDestroy If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + * @return builder + * + */ + public Builder forceDestroy(@Nullable Output forceDestroy) { + $.forceDestroy = forceDestroy; + return this; + } + + /** + * @param forceDestroy If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + * + * @return builder + * + */ + public Builder forceDestroy(Boolean forceDestroy) { + return forceDestroy(Output.of(forceDestroy)); + } + /** * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java index f88fabb622..7d4e160d8a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java @@ -71,7 +71,7 @@ * .build()); * * var membership = new Membership("membership", MembershipArgs.builder() - * .membershipId("tf-test-membership_27169") + * .membershipId("tf-test-membership_75223") * .endpoint(MembershipEndpointArgs.builder() * .gkeCluster(MembershipEndpointGkeClusterArgs.builder() * .resourceLink(primary.id().applyValue(id -> String.format("//container.googleapis.com/%s", id))) @@ -82,11 +82,11 @@ * .build()); * * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_75223") + * .scopeId("tf-test-scope_41819") * .build()); * * var membershipBinding = new MembershipBinding("membershipBinding", MembershipBindingArgs.builder() - * .membershipBindingId("tf-test-membership-binding_41819") + * .membershipBindingId("tf-test-membership-binding_75092") * .scope(scope.name()) * .membershipId(membership.membershipId()) * .location("global") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java index 6b5de181dd..f39aa3b51f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java @@ -63,7 +63,7 @@ * .build()); * * var membership = new Membership("membership", MembershipArgs.builder() - * .membershipId("tf-test-membership_75092") + * .membershipId("tf-test-membership_2605") * .endpoint(MembershipEndpointArgs.builder() * .gkeCluster(MembershipEndpointGkeClusterArgs.builder() * .resourceLink(primary.id().applyValue(id -> String.format("//container.googleapis.com/%s", id))) @@ -76,7 +76,7 @@ * final var project = OrganizationsFunctions.getProject(); * * var membershipRbacRoleBinding = new MembershipRbacRoleBinding("membershipRbacRoleBinding", MembershipRbacRoleBindingArgs.builder() - * .membershipRbacRoleBindingId("tf-test-membership-rbac-role-binding_2605") + * .membershipRbacRoleBindingId("tf-test-membership-rbac-role-binding_34535") * .membershipId(membership.membershipId()) * .user(String.format("service-%s}{@literal @}{@code gcp-sa-anthossupport.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) * .role(MembershipRbacRoleBindingRoleArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java index 521e6f2f91..a1df090209 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java @@ -56,11 +56,11 @@ * * public static void stack(Context ctx) { * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_34535") + * .scopeId("tf-test-scope_22375") * .build()); * * var namespace = new Namespace("namespace", NamespaceArgs.builder() - * .scopeNamespaceId("tf-test-namespace_22375") + * .scopeNamespaceId("tf-test-namespace_29439") * .scopeId(scope.scopeId()) * .scope(scope.name()) * .namespaceLabels(Map.ofEntries( diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java index 484d1b7665..dee39fa065 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java @@ -58,11 +58,11 @@ * * public static void stack(Context ctx) }{{@code * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_29439") + * .scopeId("tf-test-scope_87786") * .build()); * * var scopeRbacRoleBinding = new ScopeRbacRoleBinding("scopeRbacRoleBinding", ScopeRbacRoleBindingArgs.builder() - * .scopeRbacRoleBindingId("tf-test-scope-rbac-role-binding_87786") + * .scopeRbacRoleBindingId("tf-test-scope-rbac-role-binding_2067") * .scopeId(scope.scopeId()) * .user("test-email}{@literal @}{@code gmail.com") * .role(ScopeRbacRoleBindingRoleArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java index f8d61b1508..41431a60d8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java @@ -53,7 +53,7 @@ * public static void stack(Context ctx) { * var destGroup = new TunnelDestGroup("destGroup", TunnelDestGroupArgs.builder() * .region("us-central1") - * .groupName("testgroup_2067") + * .groupName("testgroup_40785") * .cidrs( * "10.1.0.0/16", * "192.168.10.0/24") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java index d2c516ff35..7591496de3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java @@ -67,8 +67,8 @@ * * public static void stack(Context ctx) }{{@code * var targetProject = new Project("targetProject", ProjectArgs.builder() - * .projectId("tf-test_40785") - * .name("tf-test_79169") + * .projectId("tf-test_79169") + * .name("tf-test_56529") * .orgId("123456789") * .billingAccount("000000-0000000-0000000-000000") * .deletionPolicy("DELETE") @@ -101,8 +101,8 @@ * .build()); * * var zone = new ManagedZone("zone", ManagedZoneArgs.builder() - * .name("tf-test-dns_56529") - * .dnsName("private_75413.example.com.") + * .name("tf-test-dns_75413") + * .dnsName("private_55138.example.com.") * .visibility("private") * .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder() * .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java b/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java index 02dd3e620e..1ddecaf942 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java @@ -205,19 +205,19 @@ * * public static void stack(Context ctx) { * var network = new Network("network", NetworkArgs.builder() - * .name("tf-test-network_55138") + * .name("tf-test-network_37559") * .autoCreateSubnetworks(false) * .build()); * * var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder() - * .name("tf-test-subnet_37559") + * .name("tf-test-subnet_91980") * .ipCidrRange("10.0.0.0/28") * .region("us-central1") * .network(network.selfLink()) * .build()); * * var instance = new Instance("instance", InstanceArgs.builder() - * .name("tf-test-instance_91980") + * .name("tf-test-instance_37118") * .machineType("e2-medium") * .canIpForward(true) * .zone("us-central1-a") @@ -236,13 +236,13 @@ * .build()); * * var basicHub = new Hub("basicHub", HubArgs.builder() - * .name("tf-test-hub_37118") + * .name("tf-test-hub_80332") * .description("A sample hub") * .labels(Map.of("label-two", "value-one")) * .build()); * * var primary = new Spoke("primary", SpokeArgs.builder() - * .name("tf-test-name_80332") + * .name("tf-test-name_13293") * .location("us-central1") * .description("A sample spoke with a linked routher appliance instance") * .labels(Map.of("label-one", "value-one")) @@ -659,8 +659,8 @@ * .hub(starHub.id()) * .autoAccept(GroupAutoAcceptArgs.builder() * .autoAcceptProjects( - * "foo_13293", - * "bar_40289") + * "foo_40289", + * "bar_33395") * .build()) * .build()); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/AuthzPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/AuthzPolicy.java index 726d8ccd7c..841e715425 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/AuthzPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/AuthzPolicy.java @@ -28,178 +28,6 @@ * * ## Example Usage * - * ### Network Services Authz Policy Advanced - * - * <!--Start PulumiCodeChooser --> - *
- * {@code
- * package generated_program;
- * 
- * import com.pulumi.Context;
- * import com.pulumi.Pulumi;
- * import com.pulumi.core.Output;
- * import com.pulumi.gcp.compute.Network;
- * import com.pulumi.gcp.compute.NetworkArgs;
- * import com.pulumi.gcp.compute.Subnetwork;
- * import com.pulumi.gcp.compute.SubnetworkArgs;
- * import com.pulumi.gcp.compute.Address;
- * import com.pulumi.gcp.compute.AddressArgs;
- * import com.pulumi.gcp.compute.RegionHealthCheck;
- * import com.pulumi.gcp.compute.RegionHealthCheckArgs;
- * import com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;
- * import com.pulumi.gcp.compute.RegionBackendService;
- * import com.pulumi.gcp.compute.RegionBackendServiceArgs;
- * import com.pulumi.gcp.compute.RegionUrlMap;
- * import com.pulumi.gcp.compute.RegionUrlMapArgs;
- * import com.pulumi.gcp.compute.RegionTargetHttpProxy;
- * import com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;
- * import com.pulumi.gcp.compute.ForwardingRule;
- * import com.pulumi.gcp.compute.ForwardingRuleArgs;
- * import com.pulumi.gcp.networkservices.AuthzExtension;
- * import com.pulumi.gcp.networkservices.AuthzExtensionArgs;
- * import com.pulumi.gcp.networksecurity.AuthzPolicy;
- * import com.pulumi.gcp.networksecurity.AuthzPolicyArgs;
- * import com.pulumi.gcp.networksecurity.inputs.AuthzPolicyTargetArgs;
- * import com.pulumi.gcp.networksecurity.inputs.AuthzPolicyCustomProviderArgs;
- * import com.pulumi.gcp.networksecurity.inputs.AuthzPolicyCustomProviderAuthzExtensionArgs;
- * import com.pulumi.resources.CustomResourceOptions;
- * import java.util.List;
- * import java.util.ArrayList;
- * import java.util.Map;
- * import java.io.File;
- * import java.nio.file.Files;
- * import java.nio.file.Paths;
- * 
- * public class App {
- *     public static void main(String[] args) {
- *         Pulumi.run(App::stack);
- *     }
- * 
- *     public static void stack(Context ctx) {
- *         var default_ = new Network("default", NetworkArgs.builder()
- *             .name("lb-network")
- *             .project("my-project-name")
- *             .autoCreateSubnetworks(false)
- *             .build());
- * 
- *         var defaultSubnetwork = new Subnetwork("defaultSubnetwork", SubnetworkArgs.builder()
- *             .name("backend-subnet")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .ipCidrRange("10.1.2.0/24")
- *             .network(default_.id())
- *             .build());
- * 
- *         var proxyOnly = new Subnetwork("proxyOnly", SubnetworkArgs.builder()
- *             .name("proxy-only-subnet")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .ipCidrRange("10.129.0.0/23")
- *             .purpose("REGIONAL_MANAGED_PROXY")
- *             .role("ACTIVE")
- *             .network(default_.id())
- *             .build());
- * 
- *         var defaultAddress = new Address("defaultAddress", AddressArgs.builder()
- *             .name("l7-ilb-ip-address")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .subnetwork(defaultSubnetwork.id())
- *             .addressType("INTERNAL")
- *             .purpose("GCE_ENDPOINT")
- *             .build());
- * 
- *         var defaultRegionHealthCheck = new RegionHealthCheck("defaultRegionHealthCheck", RegionHealthCheckArgs.builder()
- *             .name("l7-ilb-basic-check")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()
- *                 .portSpecification("USE_SERVING_PORT")
- *                 .build())
- *             .build());
- * 
- *         var urlMap = new RegionBackendService("urlMap", RegionBackendServiceArgs.builder()
- *             .name("l7-ilb-backend-service")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .loadBalancingScheme("INTERNAL_MANAGED")
- *             .healthChecks(defaultRegionHealthCheck.id())
- *             .build());
- * 
- *         var defaultRegionUrlMap = new RegionUrlMap("defaultRegionUrlMap", RegionUrlMapArgs.builder()
- *             .name("l7-ilb-map")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .defaultService(urlMap.id())
- *             .build());
- * 
- *         var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy("defaultRegionTargetHttpProxy", RegionTargetHttpProxyArgs.builder()
- *             .name("l7-ilb-proxy")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .urlMap(defaultRegionUrlMap.id())
- *             .build());
- * 
- *         var defaultForwardingRule = new ForwardingRule("defaultForwardingRule", ForwardingRuleArgs.builder()
- *             .name("l7-ilb-forwarding-rule")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .loadBalancingScheme("INTERNAL_MANAGED")
- *             .network(default_.id())
- *             .subnetwork(defaultSubnetwork.id())
- *             .ipProtocol("TCP")
- *             .portRange("80")
- *             .target(defaultRegionTargetHttpProxy.id())
- *             .ipAddress(defaultAddress.id())
- *             .build(), CustomResourceOptions.builder()
- *                 .dependsOn(proxyOnly)
- *                 .build());
- * 
- *         var authzExtension = new RegionBackendService("authzExtension", RegionBackendServiceArgs.builder()
- *             .name("authz-service")
- *             .project("my-project-name")
- *             .region("us-west1")
- *             .protocol("HTTP2")
- *             .loadBalancingScheme("INTERNAL_MANAGED")
- *             .portName("grpc")
- *             .build());
- * 
- *         var defaultAuthzExtension = new AuthzExtension("defaultAuthzExtension", AuthzExtensionArgs.builder()
- *             .name("my-authz-ext")
- *             .project("my-project-name")
- *             .location("us-west1")
- *             .description("my description")
- *             .loadBalancingScheme("INTERNAL_MANAGED")
- *             .authority("ext11.com")
- *             .service(authzExtension.selfLink())
- *             .timeout("0.1s")
- *             .failOpen(false)
- *             .forwardHeaders("Authorization")
- *             .build());
- * 
- *         var defaultAuthzPolicy = new AuthzPolicy("defaultAuthzPolicy", AuthzPolicyArgs.builder()
- *             .name("my-authz-policy")
- *             .project("my-project-name")
- *             .location("us-west1")
- *             .description("my description")
- *             .target(AuthzPolicyTargetArgs.builder()
- *                 .loadBalancingScheme("INTERNAL_MANAGED")
- *                 .resources(defaultForwardingRule.selfLink())
- *                 .build())
- *             .action("CUSTOM")
- *             .customProvider(AuthzPolicyCustomProviderArgs.builder()
- *                 .authzExtension(AuthzPolicyCustomProviderAuthzExtensionArgs.builder()
- *                     .resources(defaultAuthzExtension.id())
- *                     .build())
- *                 .build())
- *             .build());
- * 
- *     }
- * }
- * }
- * 
- * <!--End PulumiCodeChooser --> - * * ## Import * * AuthzPolicy can be imported using any of these accepted formats: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java b/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java index 498b87c1ae..2f8dbfcf85 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java @@ -260,7 +260,7 @@ * * public static void stack(Context ctx) { * var constraint = new CustomConstraint("constraint", CustomConstraintArgs.builder() - * .name("custom.disableGkeAutoUpgrade_76044") + * .name("custom.disableGkeAutoUpgrade_69391") * .parent("organizations/123456789") * .displayName("Disable GKE auto upgrade") * .description("Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/Parameter.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/Parameter.java new file mode 100644 index 0000000000..fec487a29c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/Parameter.java @@ -0,0 +1,397 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.parametermanager.ParameterArgs; +import com.pulumi.gcp.parametermanager.inputs.ParameterState; +import com.pulumi.gcp.parametermanager.outputs.ParameterPolicyMember; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Parameter Config Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.Parameter;
+ * import com.pulumi.gcp.parametermanager.ParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var parameter_basic = new Parameter("parameter-basic", ParameterArgs.builder()
+ *             .parameterId("parameter")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Parameter With Format + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.Parameter;
+ * import com.pulumi.gcp.parametermanager.ParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var parameter_with_format = new Parameter("parameter-with-format", ParameterArgs.builder()
+ *             .parameterId("parameter")
+ *             .format("JSON")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Parameter With Labels + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.Parameter;
+ * import com.pulumi.gcp.parametermanager.ParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var parameter_with_labels = new Parameter("parameter-with-labels", ParameterArgs.builder()
+ *             .parameterId("parameter")
+ *             .labels(Map.ofEntries(
+ *                 Map.entry("key1", "val1"),
+ *                 Map.entry("key2", "val2"),
+ *                 Map.entry("key3", "val3"),
+ *                 Map.entry("key4", "val4"),
+ *                 Map.entry("key5", "val5")
+ *             ))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * Parameter can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + * * `{{project}}/{{parameter_id}}` + * + * * `{{parameter_id}}` + * + * When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} + * ``` + * + */ +@ResourceType(type="gcp:parametermanager/parameter:Parameter") +public class Parameter extends com.pulumi.resources.CustomResource { + /** + * The time at which the Parameter was created. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return The time at which the Parameter was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Export(name="format", refs={String.class}, tree="[0]") + private Output format; + + /** + * @return The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Output> format() { + return Codegen.optional(this.format); + } + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + */ + public Output name() { + return this.name; + } + /** + * This must be unique within the project. + * + * *** + * + */ + @Export(name="parameterId", refs={String.class}, tree="[0]") + private Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Output parameterId() { + return this.parameterId; + } + /** + * Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + */ + @Export(name="policyMembers", refs={List.class,ParameterPolicyMember.class}, tree="[0,1]") + private Output> policyMembers; + + /** + * @return Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + */ + public Output> policyMembers() { + return this.policyMembers; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * The time at which the Parameter was updated. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return The time at which the Parameter was updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Parameter(java.lang.String name) { + this(name, ParameterArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Parameter(java.lang.String name, ParameterArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Parameter(java.lang.String name, ParameterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/parameter:Parameter", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Parameter(java.lang.String name, Output id, @Nullable ParameterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/parameter:Parameter", name, state, makeResourceOptions(options, id), false); + } + + private static ParameterArgs makeArgs(ParameterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ParameterArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Parameter get(java.lang.String name, Output id, @Nullable ParameterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Parameter(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParameterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParameterArgs.java new file mode 100644 index 0000000000..bac093fee5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParameterArgs.java @@ -0,0 +1,259 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ParameterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ParameterArgs Empty = new ParameterArgs(); + + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Import(name="format") + private @Nullable Output format; + + /** + * @return The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Optional> format() { + return Optional.ofNullable(this.format); + } + + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * This must be unique within the project. + * + * *** + * + */ + @Import(name="parameterId", required=true) + private Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Output parameterId() { + return this.parameterId; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private ParameterArgs() {} + + private ParameterArgs(ParameterArgs $) { + this.format = $.format; + this.labels = $.labels; + this.parameterId = $.parameterId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ParameterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ParameterArgs $; + + public Builder() { + $ = new ParameterArgs(); + } + + public Builder(ParameterArgs defaults) { + $ = new ParameterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param format The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(@Nullable Output format) { + $.format = format; + return this; + } + + /** + * @param format The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(String format) { + return format(Output.of(format)); + } + + /** + * @param labels The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(Output parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + return parameterId(Output.of(parameterId)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public ParameterArgs build() { + if ($.parameterId == null) { + throw new MissingRequiredPropertyException("ParameterArgs", "parameterId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParametermanagerFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParametermanagerFunctions.java new file mode 100644 index 0000000000..479ed7c5d0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/ParametermanagerFunctions.java @@ -0,0 +1,223 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.TypeShape; +import com.pulumi.deployment.Deployment; +import com.pulumi.deployment.InvokeOptions; +import com.pulumi.deployment.InvokeOutputOptions; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs; +import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterPlainArgs; +import com.pulumi.gcp.parametermanager.outputs.GetRegionalParameterResult; +import java.util.concurrent.CompletableFuture; + +public final class ParametermanagerFunctions { + /** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.parametermanager.ParametermanagerFunctions;
+     * import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()
+     *             .parameterId("foobar")
+     *             .location("us-central1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getRegionalParameter(GetRegionalParameterArgs args) { + return getRegionalParameter(args, InvokeOptions.Empty); + } + /** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.parametermanager.ParametermanagerFunctions;
+     * import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()
+     *             .parameterId("foobar")
+     *             .location("us-central1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getRegionalParameterPlain(GetRegionalParameterPlainArgs args) { + return getRegionalParameterPlain(args, InvokeOptions.Empty); + } + /** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.parametermanager.ParametermanagerFunctions;
+     * import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()
+     *             .parameterId("foobar")
+     *             .location("us-central1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getRegionalParameter(GetRegionalParameterArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", TypeShape.of(GetRegionalParameterResult.class), args, Utilities.withVersion(options)); + } + /** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.parametermanager.ParametermanagerFunctions;
+     * import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()
+     *             .parameterId("foobar")
+     *             .location("us-central1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getRegionalParameter(GetRegionalParameterArgs args, InvokeOutputOptions options) { + return Deployment.getInstance().invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", TypeShape.of(GetRegionalParameterResult.class), args, Utilities.withVersion(options)); + } + /** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.parametermanager.ParametermanagerFunctions;
+     * import com.pulumi.gcp.parametermanager.inputs.GetRegionalParameterArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var regParameterDatasource = ParametermanagerFunctions.getRegionalParameter(GetRegionalParameterArgs.builder()
+     *             .parameterId("foobar")
+     *             .location("us-central1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getRegionalParameterPlain(GetRegionalParameterPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:parametermanager/getRegionalParameter:getRegionalParameter", TypeShape.of(GetRegionalParameterResult.class), args, Utilities.withVersion(options)); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameter.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameter.java new file mode 100644 index 0000000000..3b4dbd3165 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameter.java @@ -0,0 +1,414 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.parametermanager.RegionalParameterArgs; +import com.pulumi.gcp.parametermanager.inputs.RegionalParameterState; +import com.pulumi.gcp.parametermanager.outputs.RegionalParameterPolicyMember; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Regional Parameter Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_basic = new RegionalParameter("regional-parameter-basic", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .location("us-central1")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Regional Parameter With Format + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_with_format = new RegionalParameter("regional-parameter-with-format", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .location("us-central1")
+ *             .format("JSON")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Regional Parameter With Labels + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_with_labels = new RegionalParameter("regional-parameter-with-labels", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .location("us-central1")
+ *             .labels(Map.ofEntries(
+ *                 Map.entry("key1", "val1"),
+ *                 Map.entry("key2", "val2"),
+ *                 Map.entry("key3", "val3"),
+ *                 Map.entry("key4", "val4"),
+ *                 Map.entry("key5", "val5")
+ *             ))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * RegionalParameter can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + * * `{{project}}/{{location}}/{{parameter_id}}` + * + * * `{{location}}/{{parameter_id}}` + * + * When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} + * ``` + * + */ +@ResourceType(type="gcp:parametermanager/regionalParameter:RegionalParameter") +public class RegionalParameter extends com.pulumi.resources.CustomResource { + /** + * The time at which the regional Parameter was created. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return The time at which the regional Parameter was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Export(name="format", refs={String.class}, tree="[0]") + private Output format; + + /** + * @return The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Output> format() { + return Codegen.optional(this.format); + } + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The location of the regional parameter. eg us-central1 + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the regional parameter. eg us-central1 + * + */ + public Output location() { + return this.location; + } + /** + * The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + public Output name() { + return this.name; + } + /** + * This must be unique within the project. + * + * *** + * + */ + @Export(name="parameterId", refs={String.class}, tree="[0]") + private Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Output parameterId() { + return this.parameterId; + } + /** + * An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + */ + @Export(name="policyMembers", refs={List.class,RegionalParameterPolicyMember.class}, tree="[0,1]") + private Output> policyMembers; + + /** + * @return An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + */ + public Output> policyMembers() { + return this.policyMembers; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * The time at which the regional Parameter was updated. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return The time at which the regional Parameter was updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RegionalParameter(java.lang.String name) { + this(name, RegionalParameterArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RegionalParameter(java.lang.String name, RegionalParameterArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RegionalParameter(java.lang.String name, RegionalParameterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/regionalParameter:RegionalParameter", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RegionalParameter(java.lang.String name, Output id, @Nullable RegionalParameterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/regionalParameter:RegionalParameter", name, state, makeResourceOptions(options, id), false); + } + + private static RegionalParameterArgs makeArgs(RegionalParameterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RegionalParameterArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RegionalParameter get(java.lang.String name, Output id, @Nullable RegionalParameterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RegionalParameter(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterArgs.java new file mode 100644 index 0000000000..269bfa5dc0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterArgs.java @@ -0,0 +1,299 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionalParameterArgs extends com.pulumi.resources.ResourceArgs { + + public static final RegionalParameterArgs Empty = new RegionalParameterArgs(); + + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Import(name="format") + private @Nullable Output format; + + /** + * @return The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Optional> format() { + return Optional.ofNullable(this.format); + } + + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the regional parameter. eg us-central1 + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the regional parameter. eg us-central1 + * + */ + public Output location() { + return this.location; + } + + /** + * This must be unique within the project. + * + * *** + * + */ + @Import(name="parameterId", required=true) + private Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Output parameterId() { + return this.parameterId; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private RegionalParameterArgs() {} + + private RegionalParameterArgs(RegionalParameterArgs $) { + this.format = $.format; + this.labels = $.labels; + this.location = $.location; + this.parameterId = $.parameterId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionalParameterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionalParameterArgs $; + + public Builder() { + $ = new RegionalParameterArgs(); + } + + public Builder(RegionalParameterArgs defaults) { + $ = new RegionalParameterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param format The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(@Nullable Output format) { + $.format = format; + return this; + } + + /** + * @param format The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(String format) { + return format(Output.of(format)); + } + + /** + * @param labels The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(Output parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + return parameterId(Output.of(parameterId)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public RegionalParameterArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("RegionalParameterArgs", "location"); + } + if ($.parameterId == null) { + throw new MissingRequiredPropertyException("RegionalParameterArgs", "parameterId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersion.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersion.java new file mode 100644 index 0000000000..44eba05fe2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersion.java @@ -0,0 +1,352 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs; +import com.pulumi.gcp.parametermanager.inputs.RegionalParameterVersionState; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Regional Parameter Version Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersion;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_basic = new RegionalParameter("regional-parameter-basic", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .location("us-central1")
+ *             .build());
+ * 
+ *         var regional_parameter_version_basic = new RegionalParameterVersion("regional-parameter-version-basic", RegionalParameterVersionArgs.builder()
+ *             .parameter(regional_parameter_basic.id())
+ *             .parameterVersionId("regional_parameter_version")
+ *             .parameterData("regional-parameter-version-data")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Regional Parameter Version With Json Format + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersion;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_basic = new RegionalParameter("regional-parameter-basic", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .format("JSON")
+ *             .location("us-central1")
+ *             .build());
+ * 
+ *         var regional_parameter_version_with_json_format = new RegionalParameterVersion("regional-parameter-version-with-json-format", RegionalParameterVersionArgs.builder()
+ *             .parameter(regional_parameter_basic.id())
+ *             .parameterVersionId("regional_parameter_version")
+ *             .parameterData(StdFunctions.file(FileArgs.builder()
+ *                 .input("parameter_data_json_format.yaml")
+ *                 .build()).result())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Regional Parameter Version With Yaml Format + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.parametermanager.RegionalParameter;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterArgs;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersion;
+ * import com.pulumi.gcp.parametermanager.RegionalParameterVersionArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var regional_parameter_basic = new RegionalParameter("regional-parameter-basic", RegionalParameterArgs.builder()
+ *             .parameterId("regional_parameter")
+ *             .format("YAML")
+ *             .location("us-central1")
+ *             .build());
+ * 
+ *         var regional_parameter_version_with_yaml_format = new RegionalParameterVersion("regional-parameter-version-with-yaml-format", RegionalParameterVersionArgs.builder()
+ *             .parameter(regional_parameter_basic.id())
+ *             .parameterVersionId("regional_parameter_version")
+ *             .parameterData(StdFunctions.file(FileArgs.builder()
+ *                 .input("parameter_data_yaml_format.yaml")
+ *                 .build()).result())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * RegionalParameterVersion can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + * When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} + * ``` + * + */ +@ResourceType(type="gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion") +public class RegionalParameterVersion extends com.pulumi.resources.CustomResource { + /** + * The time at which the Regional Parameter Version was created. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return The time at which the Regional Parameter Version was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + @Export(name="disabled", refs={Boolean.class}, tree="[0]") + private Output disabled; + + /** + * @return The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + public Output> disabled() { + return Codegen.optional(this.disabled); + } + /** + * Location of Parameter Manager Regional parameter resource. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return Location of Parameter Manager Regional parameter resource. + * + */ + public Output location() { + return this.location; + } + /** + * The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + */ + public Output name() { + return this.name; + } + /** + * Parameter Manager Regional Parameter resource. + * + */ + @Export(name="parameter", refs={String.class}, tree="[0]") + private Output parameter; + + /** + * @return Parameter Manager Regional Parameter resource. + * + */ + public Output parameter() { + return this.parameter; + } + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + @Export(name="parameterData", refs={String.class}, tree="[0]") + private Output parameterData; + + /** + * @return The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + public Output parameterData() { + return this.parameterData; + } + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + @Export(name="parameterVersionId", refs={String.class}, tree="[0]") + private Output parameterVersionId; + + /** + * @return Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + public Output parameterVersionId() { + return this.parameterVersionId; + } + /** + * The time at which the Regional Parameter Version was updated. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return The time at which the Regional Parameter Version was updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RegionalParameterVersion(java.lang.String name) { + this(name, RegionalParameterVersionArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RegionalParameterVersion(java.lang.String name, RegionalParameterVersionArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RegionalParameterVersion(java.lang.String name, RegionalParameterVersionArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RegionalParameterVersion(java.lang.String name, Output id, @Nullable RegionalParameterVersionState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion", name, state, makeResourceOptions(options, id), false); + } + + private static RegionalParameterVersionArgs makeArgs(RegionalParameterVersionArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RegionalParameterVersionArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "parameterData" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RegionalParameterVersion get(java.lang.String name, Output id, @Nullable RegionalParameterVersionState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RegionalParameterVersion(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersionArgs.java new file mode 100644 index 0000000000..1e0d6a8279 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/RegionalParameterVersionArgs.java @@ -0,0 +1,217 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionalParameterVersionArgs extends com.pulumi.resources.ResourceArgs { + + public static final RegionalParameterVersionArgs Empty = new RegionalParameterVersionArgs(); + + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + @Import(name="disabled") + private @Nullable Output disabled; + + /** + * @return The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + public Optional> disabled() { + return Optional.ofNullable(this.disabled); + } + + /** + * Parameter Manager Regional Parameter resource. + * + */ + @Import(name="parameter", required=true) + private Output parameter; + + /** + * @return Parameter Manager Regional Parameter resource. + * + */ + public Output parameter() { + return this.parameter; + } + + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + @Import(name="parameterData", required=true) + private Output parameterData; + + /** + * @return The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + public Output parameterData() { + return this.parameterData; + } + + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + @Import(name="parameterVersionId", required=true) + private Output parameterVersionId; + + /** + * @return Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + public Output parameterVersionId() { + return this.parameterVersionId; + } + + private RegionalParameterVersionArgs() {} + + private RegionalParameterVersionArgs(RegionalParameterVersionArgs $) { + this.disabled = $.disabled; + this.parameter = $.parameter; + this.parameterData = $.parameterData; + this.parameterVersionId = $.parameterVersionId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionalParameterVersionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionalParameterVersionArgs $; + + public Builder() { + $ = new RegionalParameterVersionArgs(); + } + + public Builder(RegionalParameterVersionArgs defaults) { + $ = new RegionalParameterVersionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param disabled The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + * @return builder + * + */ + public Builder disabled(@Nullable Output disabled) { + $.disabled = disabled; + return this; + } + + /** + * @param disabled The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + * @return builder + * + */ + public Builder disabled(Boolean disabled) { + return disabled(Output.of(disabled)); + } + + /** + * @param parameter Parameter Manager Regional Parameter resource. + * + * @return builder + * + */ + public Builder parameter(Output parameter) { + $.parameter = parameter; + return this; + } + + /** + * @param parameter Parameter Manager Regional Parameter resource. + * + * @return builder + * + */ + public Builder parameter(String parameter) { + return parameter(Output.of(parameter)); + } + + /** + * @param parameterData The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + * @return builder + * + */ + public Builder parameterData(Output parameterData) { + $.parameterData = parameterData; + return this; + } + + /** + * @param parameterData The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + * @return builder + * + */ + public Builder parameterData(String parameterData) { + return parameterData(Output.of(parameterData)); + } + + /** + * @param parameterVersionId Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + * @return builder + * + */ + public Builder parameterVersionId(Output parameterVersionId) { + $.parameterVersionId = parameterVersionId; + return this; + } + + /** + * @param parameterVersionId Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + * @return builder + * + */ + public Builder parameterVersionId(String parameterVersionId) { + return parameterVersionId(Output.of(parameterVersionId)); + } + + public RegionalParameterVersionArgs build() { + if ($.parameter == null) { + throw new MissingRequiredPropertyException("RegionalParameterVersionArgs", "parameter"); + } + if ($.parameterData == null) { + throw new MissingRequiredPropertyException("RegionalParameterVersionArgs", "parameterData"); + } + if ($.parameterVersionId == null) { + throw new MissingRequiredPropertyException("RegionalParameterVersionArgs", "parameterVersionId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterArgs.java new file mode 100644 index 0000000000..2f89cd828b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterArgs.java @@ -0,0 +1,164 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetRegionalParameterArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetRegionalParameterArgs Empty = new GetRegionalParameterArgs(); + + /** + * The location of the regional parameter. eg us-central1 + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the regional parameter. eg us-central1 + * + */ + public Output location() { + return this.location; + } + + /** + * The name of the regional parameter. + * + */ + @Import(name="parameterId", required=true) + private Output parameterId; + + /** + * @return The name of the regional parameter. + * + */ + public Output parameterId() { + return this.parameterId; + } + + /** + * The ID of the project in which the resource belongs. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private GetRegionalParameterArgs() {} + + private GetRegionalParameterArgs(GetRegionalParameterArgs $) { + this.location = $.location; + this.parameterId = $.parameterId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetRegionalParameterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetRegionalParameterArgs $; + + public Builder() { + $ = new GetRegionalParameterArgs(); + } + + public Builder(GetRegionalParameterArgs defaults) { + $ = new GetRegionalParameterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param parameterId The name of the regional parameter. + * + * @return builder + * + */ + public Builder parameterId(Output parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param parameterId The name of the regional parameter. + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + return parameterId(Output.of(parameterId)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public GetRegionalParameterArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterArgs", "location"); + } + if ($.parameterId == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterArgs", "parameterId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterPlainArgs.java new file mode 100644 index 0000000000..ea9ff82c53 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/GetRegionalParameterPlainArgs.java @@ -0,0 +1,133 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetRegionalParameterPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetRegionalParameterPlainArgs Empty = new GetRegionalParameterPlainArgs(); + + /** + * The location of the regional parameter. eg us-central1 + * + */ + @Import(name="location", required=true) + private String location; + + /** + * @return The location of the regional parameter. eg us-central1 + * + */ + public String location() { + return this.location; + } + + /** + * The name of the regional parameter. + * + */ + @Import(name="parameterId", required=true) + private String parameterId; + + /** + * @return The name of the regional parameter. + * + */ + public String parameterId() { + return this.parameterId; + } + + /** + * The ID of the project in which the resource belongs. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return The ID of the project in which the resource belongs. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + private GetRegionalParameterPlainArgs() {} + + private GetRegionalParameterPlainArgs(GetRegionalParameterPlainArgs $) { + this.location = $.location; + this.parameterId = $.parameterId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetRegionalParameterPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetRegionalParameterPlainArgs $; + + public Builder() { + $ = new GetRegionalParameterPlainArgs(); + } + + public Builder(GetRegionalParameterPlainArgs defaults) { + $ = new GetRegionalParameterPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(String location) { + $.location = location; + return this; + } + + /** + * @param parameterId The name of the regional parameter. + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + public GetRegionalParameterPlainArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterPlainArgs", "location"); + } + if ($.parameterId == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterPlainArgs", "parameterId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterPolicyMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterPolicyMemberArgs.java new file mode 100644 index 0000000000..f31d7233f8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterPolicyMemberArgs.java @@ -0,0 +1,152 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ParameterPolicyMemberArgs extends com.pulumi.resources.ResourceArgs { + + public static final ParameterPolicyMemberArgs Empty = new ParameterPolicyMemberArgs(); + + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + */ + @Import(name="iamPolicyNamePrincipal") + private @Nullable Output iamPolicyNamePrincipal; + + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + */ + public Optional> iamPolicyNamePrincipal() { + return Optional.ofNullable(this.iamPolicyNamePrincipal); + } + + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + */ + @Import(name="iamPolicyUidPrincipal") + private @Nullable Output iamPolicyUidPrincipal; + + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + */ + public Optional> iamPolicyUidPrincipal() { + return Optional.ofNullable(this.iamPolicyUidPrincipal); + } + + private ParameterPolicyMemberArgs() {} + + private ParameterPolicyMemberArgs(ParameterPolicyMemberArgs $) { + this.iamPolicyNamePrincipal = $.iamPolicyNamePrincipal; + this.iamPolicyUidPrincipal = $.iamPolicyUidPrincipal; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ParameterPolicyMemberArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ParameterPolicyMemberArgs $; + + public Builder() { + $ = new ParameterPolicyMemberArgs(); + } + + public Builder(ParameterPolicyMemberArgs defaults) { + $ = new ParameterPolicyMemberArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param iamPolicyNamePrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder iamPolicyNamePrincipal(@Nullable Output iamPolicyNamePrincipal) { + $.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + return this; + } + + /** + * @param iamPolicyNamePrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder iamPolicyNamePrincipal(String iamPolicyNamePrincipal) { + return iamPolicyNamePrincipal(Output.of(iamPolicyNamePrincipal)); + } + + /** + * @param iamPolicyUidPrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + * @return builder + * + */ + public Builder iamPolicyUidPrincipal(@Nullable Output iamPolicyUidPrincipal) { + $.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return this; + } + + /** + * @param iamPolicyUidPrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + * @return builder + * + */ + public Builder iamPolicyUidPrincipal(String iamPolicyUidPrincipal) { + return iamPolicyUidPrincipal(Output.of(iamPolicyUidPrincipal)); + } + + public ParameterPolicyMemberArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterState.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterState.java new file mode 100644 index 0000000000..7aeed8b029 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/ParameterState.java @@ -0,0 +1,502 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.parametermanager.inputs.ParameterPolicyMemberArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ParameterState extends com.pulumi.resources.ResourceArgs { + + public static final ParameterState Empty = new ParameterState(); + + /** + * The time at which the Parameter was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return The time at which the Parameter was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Import(name="format") + private @Nullable Output format; + + /** + * @return The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Optional> format() { + return Optional.ofNullable(this.format); + } + + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * This must be unique within the project. + * + * *** + * + */ + @Import(name="parameterId") + private @Nullable Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Optional> parameterId() { + return Optional.ofNullable(this.parameterId); + } + + /** + * Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + */ + @Import(name="policyMembers") + private @Nullable Output> policyMembers; + + /** + * @return Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + */ + public Optional>> policyMembers() { + return Optional.ofNullable(this.policyMembers); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * The time at which the Parameter was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return The time at which the Parameter was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ParameterState() {} + + private ParameterState(ParameterState $) { + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.format = $.format; + this.labels = $.labels; + this.name = $.name; + this.parameterId = $.parameterId; + this.policyMembers = $.policyMembers; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ParameterState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ParameterState $; + + public Builder() { + $ = new ParameterState(); + } + + public Builder(ParameterState defaults) { + $ = new ParameterState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime The time at which the Parameter was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime The time at which the Parameter was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param format The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(@Nullable Output format) { + $.format = format; + return this; + } + + /** + * @param format The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(String format) { + return format(Output.of(format)); + } + + /** + * @param labels The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param name The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(@Nullable Output parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + return parameterId(Output.of(parameterId)); + } + + /** + * @param policyMembers Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(@Nullable Output> policyMembers) { + $.policyMembers = policyMembers; + return this; + } + + /** + * @param policyMembers Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(List policyMembers) { + return policyMembers(Output.of(policyMembers)); + } + + /** + * @param policyMembers Policy member strings of a Google Cloud resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(ParameterPolicyMemberArgs... policyMembers) { + return policyMembers(List.of(policyMembers)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param updateTime The time at which the Parameter was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime The time at which the Parameter was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ParameterState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterPolicyMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterPolicyMemberArgs.java new file mode 100644 index 0000000000..cb4e4d8fd1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterPolicyMemberArgs.java @@ -0,0 +1,148 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionalParameterPolicyMemberArgs extends com.pulumi.resources.ResourceArgs { + + public static final RegionalParameterPolicyMemberArgs Empty = new RegionalParameterPolicyMemberArgs(); + + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + @Import(name="iamPolicyNamePrincipal") + private @Nullable Output iamPolicyNamePrincipal; + + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + public Optional> iamPolicyNamePrincipal() { + return Optional.ofNullable(this.iamPolicyNamePrincipal); + } + + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + */ + @Import(name="iamPolicyUidPrincipal") + private @Nullable Output iamPolicyUidPrincipal; + + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + */ + public Optional> iamPolicyUidPrincipal() { + return Optional.ofNullable(this.iamPolicyUidPrincipal); + } + + private RegionalParameterPolicyMemberArgs() {} + + private RegionalParameterPolicyMemberArgs(RegionalParameterPolicyMemberArgs $) { + this.iamPolicyNamePrincipal = $.iamPolicyNamePrincipal; + this.iamPolicyUidPrincipal = $.iamPolicyUidPrincipal; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionalParameterPolicyMemberArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionalParameterPolicyMemberArgs $; + + public Builder() { + $ = new RegionalParameterPolicyMemberArgs(); + } + + public Builder(RegionalParameterPolicyMemberArgs defaults) { + $ = new RegionalParameterPolicyMemberArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param iamPolicyNamePrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder iamPolicyNamePrincipal(@Nullable Output iamPolicyNamePrincipal) { + $.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + return this; + } + + /** + * @param iamPolicyNamePrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder iamPolicyNamePrincipal(String iamPolicyNamePrincipal) { + return iamPolicyNamePrincipal(Output.of(iamPolicyNamePrincipal)); + } + + /** + * @param iamPolicyUidPrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + * @return builder + * + */ + public Builder iamPolicyUidPrincipal(@Nullable Output iamPolicyUidPrincipal) { + $.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return this; + } + + /** + * @param iamPolicyUidPrincipal (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + * @return builder + * + */ + public Builder iamPolicyUidPrincipal(String iamPolicyUidPrincipal) { + return iamPolicyUidPrincipal(Output.of(iamPolicyUidPrincipal)); + } + + public RegionalParameterPolicyMemberArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterState.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterState.java new file mode 100644 index 0000000000..52b137288a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterState.java @@ -0,0 +1,539 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.parametermanager.inputs.RegionalParameterPolicyMemberArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionalParameterState extends com.pulumi.resources.ResourceArgs { + + public static final RegionalParameterState Empty = new RegionalParameterState(); + + /** + * The time at which the regional Parameter was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return The time at which the regional Parameter was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + @Import(name="format") + private @Nullable Output format; + + /** + * @return The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + */ + public Optional> format() { + return Optional.ofNullable(this.format); + } + + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the regional parameter. eg us-central1 + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the regional parameter. eg us-central1 + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * This must be unique within the project. + * + * *** + * + */ + @Import(name="parameterId") + private @Nullable Output parameterId; + + /** + * @return This must be unique within the project. + * + * *** + * + */ + public Optional> parameterId() { + return Optional.ofNullable(this.parameterId); + } + + /** + * An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + */ + @Import(name="policyMembers") + private @Nullable Output> policyMembers; + + /** + * @return An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + */ + public Optional>> policyMembers() { + return Optional.ofNullable(this.policyMembers); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * The time at which the regional Parameter was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return The time at which the regional Parameter was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private RegionalParameterState() {} + + private RegionalParameterState(RegionalParameterState $) { + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.format = $.format; + this.labels = $.labels; + this.location = $.location; + this.name = $.name; + this.parameterId = $.parameterId; + this.policyMembers = $.policyMembers; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionalParameterState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionalParameterState $; + + public Builder() { + $ = new RegionalParameterState(); + } + + public Builder(RegionalParameterState defaults) { + $ = new RegionalParameterState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime The time at which the regional Parameter was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime The time at which the regional Parameter was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param format The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(@Nullable Output format) { + $.format = format; + return this; + } + + /** + * @param format The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + * + * @return builder + * + */ + public Builder format(String format) { + return format(Output.of(format)); + } + + /** + * @param labels The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effective_labels` for all of the labels present on the resource. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the regional parameter. eg us-central1 + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(@Nullable Output parameterId) { + $.parameterId = parameterId; + return this; + } + + /** + * @param parameterId This must be unique within the project. + * + * *** + * + * @return builder + * + */ + public Builder parameterId(String parameterId) { + return parameterId(Output.of(parameterId)); + } + + /** + * @param policyMembers An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(@Nullable Output> policyMembers) { + $.policyMembers = policyMembers; + return this; + } + + /** + * @param policyMembers An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(List policyMembers) { + return policyMembers(Output.of(policyMembers)); + } + + /** + * @param policyMembers An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policyMembers(RegionalParameterPolicyMemberArgs... policyMembers) { + return policyMembers(List.of(policyMembers)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param updateTime The time at which the regional Parameter was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime The time at which the regional Parameter was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public RegionalParameterState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterVersionState.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterVersionState.java new file mode 100644 index 0000000000..835ef066af --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/inputs/RegionalParameterVersionState.java @@ -0,0 +1,359 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionalParameterVersionState extends com.pulumi.resources.ResourceArgs { + + public static final RegionalParameterVersionState Empty = new RegionalParameterVersionState(); + + /** + * The time at which the Regional Parameter Version was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return The time at which the Regional Parameter Version was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + @Import(name="disabled") + private @Nullable Output disabled; + + /** + * @return The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + */ + public Optional> disabled() { + return Optional.ofNullable(this.disabled); + } + + /** + * Location of Parameter Manager Regional parameter resource. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Location of Parameter Manager Regional parameter resource. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Parameter Manager Regional Parameter resource. + * + */ + @Import(name="parameter") + private @Nullable Output parameter; + + /** + * @return Parameter Manager Regional Parameter resource. + * + */ + public Optional> parameter() { + return Optional.ofNullable(this.parameter); + } + + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + @Import(name="parameterData") + private @Nullable Output parameterData; + + /** + * @return The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + */ + public Optional> parameterData() { + return Optional.ofNullable(this.parameterData); + } + + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + @Import(name="parameterVersionId") + private @Nullable Output parameterVersionId; + + /** + * @return Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + */ + public Optional> parameterVersionId() { + return Optional.ofNullable(this.parameterVersionId); + } + + /** + * The time at which the Regional Parameter Version was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return The time at which the Regional Parameter Version was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private RegionalParameterVersionState() {} + + private RegionalParameterVersionState(RegionalParameterVersionState $) { + this.createTime = $.createTime; + this.disabled = $.disabled; + this.location = $.location; + this.name = $.name; + this.parameter = $.parameter; + this.parameterData = $.parameterData; + this.parameterVersionId = $.parameterVersionId; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionalParameterVersionState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionalParameterVersionState $; + + public Builder() { + $ = new RegionalParameterVersionState(); + } + + public Builder(RegionalParameterVersionState defaults) { + $ = new RegionalParameterVersionState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime The time at which the Regional Parameter Version was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime The time at which the Regional Parameter Version was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param disabled The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + * @return builder + * + */ + public Builder disabled(@Nullable Output disabled) { + $.disabled = disabled; + return this; + } + + /** + * @param disabled The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + * + * @return builder + * + */ + public Builder disabled(Boolean disabled) { + return disabled(Output.of(disabled)); + } + + /** + * @param location Location of Parameter Manager Regional parameter resource. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Location of Parameter Manager Regional parameter resource. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parameter Parameter Manager Regional Parameter resource. + * + * @return builder + * + */ + public Builder parameter(@Nullable Output parameter) { + $.parameter = parameter; + return this; + } + + /** + * @param parameter Parameter Manager Regional Parameter resource. + * + * @return builder + * + */ + public Builder parameter(String parameter) { + return parameter(Output.of(parameter)); + } + + /** + * @param parameterData The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + * @return builder + * + */ + public Builder parameterData(@Nullable Output parameterData) { + $.parameterData = parameterData; + return this; + } + + /** + * @param parameterData The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + * + * @return builder + * + */ + public Builder parameterData(String parameterData) { + return parameterData(Output.of(parameterData)); + } + + /** + * @param parameterVersionId Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + * @return builder + * + */ + public Builder parameterVersionId(@Nullable Output parameterVersionId) { + $.parameterVersionId = parameterVersionId; + return this; + } + + /** + * @param parameterVersionId Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * *** + * + * @return builder + * + */ + public Builder parameterVersionId(String parameterVersionId) { + return parameterVersionId(Output.of(parameterVersionId)); + } + + /** + * @param updateTime The time at which the Regional Parameter Version was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime The time at which the Regional Parameter Version was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public RegionalParameterVersionState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterPolicyMember.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterPolicyMember.java new file mode 100644 index 0000000000..e47df1d07d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterPolicyMember.java @@ -0,0 +1,91 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetRegionalParameterPolicyMember { + /** + * @return IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + * + */ + private String iamPolicyNamePrincipal; + /** + * @return IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + * + */ + private String iamPolicyUidPrincipal; + + private GetRegionalParameterPolicyMember() {} + /** + * @return IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + * + */ + public String iamPolicyNamePrincipal() { + return this.iamPolicyNamePrincipal; + } + /** + * @return IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + * + */ + public String iamPolicyUidPrincipal() { + return this.iamPolicyUidPrincipal; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetRegionalParameterPolicyMember defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String iamPolicyNamePrincipal; + private String iamPolicyUidPrincipal; + public Builder() {} + public Builder(GetRegionalParameterPolicyMember defaults) { + Objects.requireNonNull(defaults); + this.iamPolicyNamePrincipal = defaults.iamPolicyNamePrincipal; + this.iamPolicyUidPrincipal = defaults.iamPolicyUidPrincipal; + } + + @CustomType.Setter + public Builder iamPolicyNamePrincipal(String iamPolicyNamePrincipal) { + if (iamPolicyNamePrincipal == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterPolicyMember", "iamPolicyNamePrincipal"); + } + this.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + return this; + } + @CustomType.Setter + public Builder iamPolicyUidPrincipal(String iamPolicyUidPrincipal) { + if (iamPolicyUidPrincipal == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterPolicyMember", "iamPolicyUidPrincipal"); + } + this.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return this; + } + public GetRegionalParameterPolicyMember build() { + final var _resultValue = new GetRegionalParameterPolicyMember(); + _resultValue.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + _resultValue.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterResult.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterResult.java new file mode 100644 index 0000000000..fe8d5669d5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/GetRegionalParameterResult.java @@ -0,0 +1,229 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.parametermanager.outputs.GetRegionalParameterPolicyMember; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class GetRegionalParameterResult { + private String createTime; + private Map effectiveLabels; + private String format; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private Map labels; + private String location; + private String name; + private String parameterId; + private List policyMembers; + private @Nullable String project; + private Map pulumiLabels; + private String updateTime; + + private GetRegionalParameterResult() {} + public String createTime() { + return this.createTime; + } + public Map effectiveLabels() { + return this.effectiveLabels; + } + public String format() { + return this.format; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public Map labels() { + return this.labels; + } + public String location() { + return this.location; + } + public String name() { + return this.name; + } + public String parameterId() { + return this.parameterId; + } + public List policyMembers() { + return this.policyMembers; + } + public Optional project() { + return Optional.ofNullable(this.project); + } + public Map pulumiLabels() { + return this.pulumiLabels; + } + public String updateTime() { + return this.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetRegionalParameterResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String createTime; + private Map effectiveLabels; + private String format; + private String id; + private Map labels; + private String location; + private String name; + private String parameterId; + private List policyMembers; + private @Nullable String project; + private Map pulumiLabels; + private String updateTime; + public Builder() {} + public Builder(GetRegionalParameterResult defaults) { + Objects.requireNonNull(defaults); + this.createTime = defaults.createTime; + this.effectiveLabels = defaults.effectiveLabels; + this.format = defaults.format; + this.id = defaults.id; + this.labels = defaults.labels; + this.location = defaults.location; + this.name = defaults.name; + this.parameterId = defaults.parameterId; + this.policyMembers = defaults.policyMembers; + this.project = defaults.project; + this.pulumiLabels = defaults.pulumiLabels; + this.updateTime = defaults.updateTime; + } + + @CustomType.Setter + public Builder createTime(String createTime) { + if (createTime == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "createTime"); + } + this.createTime = createTime; + return this; + } + @CustomType.Setter + public Builder effectiveLabels(Map effectiveLabels) { + if (effectiveLabels == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "effectiveLabels"); + } + this.effectiveLabels = effectiveLabels; + return this; + } + @CustomType.Setter + public Builder format(String format) { + if (format == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "format"); + } + this.format = format; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder labels(Map labels) { + if (labels == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "labels"); + } + this.labels = labels; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder parameterId(String parameterId) { + if (parameterId == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "parameterId"); + } + this.parameterId = parameterId; + return this; + } + @CustomType.Setter + public Builder policyMembers(List policyMembers) { + if (policyMembers == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "policyMembers"); + } + this.policyMembers = policyMembers; + return this; + } + public Builder policyMembers(GetRegionalParameterPolicyMember... policyMembers) { + return policyMembers(List.of(policyMembers)); + } + @CustomType.Setter + public Builder project(@Nullable String project) { + + this.project = project; + return this; + } + @CustomType.Setter + public Builder pulumiLabels(Map pulumiLabels) { + if (pulumiLabels == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "pulumiLabels"); + } + this.pulumiLabels = pulumiLabels; + return this; + } + @CustomType.Setter + public Builder updateTime(String updateTime) { + if (updateTime == null) { + throw new MissingRequiredPropertyException("GetRegionalParameterResult", "updateTime"); + } + this.updateTime = updateTime; + return this; + } + public GetRegionalParameterResult build() { + final var _resultValue = new GetRegionalParameterResult(); + _resultValue.createTime = createTime; + _resultValue.effectiveLabels = effectiveLabels; + _resultValue.format = format; + _resultValue.id = id; + _resultValue.labels = labels; + _resultValue.location = location; + _resultValue.name = name; + _resultValue.parameterId = parameterId; + _resultValue.policyMembers = policyMembers; + _resultValue.project = project; + _resultValue.pulumiLabels = pulumiLabels; + _resultValue.updateTime = updateTime; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/ParameterPolicyMember.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/ParameterPolicyMember.java new file mode 100644 index 0000000000..22fb4fad83 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/ParameterPolicyMember.java @@ -0,0 +1,94 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ParameterPolicyMember { + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + */ + private @Nullable String iamPolicyNamePrincipal; + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + */ + private @Nullable String iamPolicyUidPrincipal; + + private ParameterPolicyMember() {} + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + * + */ + public Optional iamPolicyNamePrincipal() { + return Optional.ofNullable(this.iamPolicyNamePrincipal); + } + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + * + */ + public Optional iamPolicyUidPrincipal() { + return Optional.ofNullable(this.iamPolicyUidPrincipal); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ParameterPolicyMember defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String iamPolicyNamePrincipal; + private @Nullable String iamPolicyUidPrincipal; + public Builder() {} + public Builder(ParameterPolicyMember defaults) { + Objects.requireNonNull(defaults); + this.iamPolicyNamePrincipal = defaults.iamPolicyNamePrincipal; + this.iamPolicyUidPrincipal = defaults.iamPolicyUidPrincipal; + } + + @CustomType.Setter + public Builder iamPolicyNamePrincipal(@Nullable String iamPolicyNamePrincipal) { + + this.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + return this; + } + @CustomType.Setter + public Builder iamPolicyUidPrincipal(@Nullable String iamPolicyUidPrincipal) { + + this.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return this; + } + public ParameterPolicyMember build() { + final var _resultValue = new ParameterPolicyMember(); + _resultValue.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + _resultValue.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/RegionalParameterPolicyMember.java b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/RegionalParameterPolicyMember.java new file mode 100644 index 0000000000..4cb77a54ab --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/parametermanager/outputs/RegionalParameterPolicyMember.java @@ -0,0 +1,92 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.parametermanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RegionalParameterPolicyMember { + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + private @Nullable String iamPolicyNamePrincipal; + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + */ + private @Nullable String iamPolicyUidPrincipal; + + private RegionalParameterPolicyMember() {} + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + * + */ + public Optional iamPolicyNamePrincipal() { + return Optional.ofNullable(this.iamPolicyNamePrincipal); + } + /** + * @return (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + * + */ + public Optional iamPolicyUidPrincipal() { + return Optional.ofNullable(this.iamPolicyUidPrincipal); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RegionalParameterPolicyMember defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String iamPolicyNamePrincipal; + private @Nullable String iamPolicyUidPrincipal; + public Builder() {} + public Builder(RegionalParameterPolicyMember defaults) { + Objects.requireNonNull(defaults); + this.iamPolicyNamePrincipal = defaults.iamPolicyNamePrincipal; + this.iamPolicyUidPrincipal = defaults.iamPolicyUidPrincipal; + } + + @CustomType.Setter + public Builder iamPolicyNamePrincipal(@Nullable String iamPolicyNamePrincipal) { + + this.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + return this; + } + @CustomType.Setter + public Builder iamPolicyUidPrincipal(@Nullable String iamPolicyUidPrincipal) { + + this.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return this; + } + public RegionalParameterPolicyMember build() { + final var _resultValue = new RegionalParameterPolicyMember(); + _resultValue.iamPolicyNamePrincipal = iamPolicyNamePrincipal; + _resultValue.iamPolicyUidPrincipal = iamPolicyUidPrincipal; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java b/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java index 402e7eb146..0876ff8b1a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java @@ -560,7 +560,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_69391") + * .filenameSuffix("-_8270") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") @@ -637,7 +637,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_8270") + * .filenameSuffix("-_41150") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") @@ -722,7 +722,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_41150") + * .filenameSuffix("-_89313") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstance.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstance.java index fa7fe36431..7246fbe2a1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstance.java @@ -13,6 +13,7 @@ import com.pulumi.gcp.sql.outputs.DatabaseInstanceClone; import com.pulumi.gcp.sql.outputs.DatabaseInstanceIpAddress; import com.pulumi.gcp.sql.outputs.DatabaseInstanceReplicaConfiguration; +import com.pulumi.gcp.sql.outputs.DatabaseInstanceReplicationCluster; import com.pulumi.gcp.sql.outputs.DatabaseInstanceRestoreBackupContext; import com.pulumi.gcp.sql.outputs.DatabaseInstanceServerCaCert; import com.pulumi.gcp.sql.outputs.DatabaseInstanceSettings; @@ -316,9 +317,9 @@ * * <!--End PulumiCodeChooser --> * - * ## Switchover (SQL Server Only) + * ## Switchover * - * Users can perform a switchover on any direct `cascadable` replica by following the steps below. + * Users can perform a switchover on a replica by following the steps below. * * ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. * @@ -326,22 +327,26 @@ * * ### Steps to Invoke Switchover * - * Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) + * MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. + * + * SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) * * #### Invoking switchover in the replica resource: * 1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` * 2. Remove `master_instance_name` - * 3. Remove `replica_configuration` + * 3. (SQL Server) Remove `replica_configuration` * 4. Add current primary's name to the replica's `replica_names` list + * 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. + * 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. * * #### Updating the primary resource: * 1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` * 2. Set `master_instance_name` to the original replica (which will be primary after switchover) - * 3. Set `replica_configuration` and set `cascadable_replica` to `true` + * 3. (SQL Server) Set `replica_configuration` and set `cascadable_replica` to `true` * 4. Remove original replica from `replica_names` - * - * > **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. - * + * * **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. + * 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. + * 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. * #### Plan and verify that: * - `pulumi preview` outputs **"0 to add, 0 to destroy"** * - `pulumi preview` does not say **"must be replaced"** for any resource @@ -712,6 +717,22 @@ public Output replicaConfiguration() { public Output> replicaNames() { return this.replicaNames; } + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + @Export(name="replicationCluster", refs={DatabaseInstanceReplicationCluster.class}, tree="[0]") + private Output replicationCluster; + + /** + * @return A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + public Output replicationCluster() { + return this.replicationCluster; + } /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstanceArgs.java index 217eba3439..d5ba484af7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/DatabaseInstanceArgs.java @@ -8,6 +8,7 @@ import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.sql.inputs.DatabaseInstanceCloneArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceReplicaConfigurationArgs; +import com.pulumi.gcp.sql.inputs.DatabaseInstanceReplicationClusterArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceRestoreBackupContextArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs; import java.lang.Boolean; @@ -258,6 +259,23 @@ public Optional>> replicaNames() { return Optional.ofNullable(this.replicaNames); } + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + @Import(name="replicationCluster") + private @Nullable Output replicationCluster; + + /** + * @return A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + public Optional> replicationCluster() { + return Optional.ofNullable(this.replicationCluster); + } + /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -326,6 +344,7 @@ private DatabaseInstanceArgs(DatabaseInstanceArgs $) { this.region = $.region; this.replicaConfiguration = $.replicaConfiguration; this.replicaNames = $.replicaNames; + this.replicationCluster = $.replicationCluster; this.restoreBackupContext = $.restoreBackupContext; this.rootPassword = $.rootPassword; this.settings = $.settings; @@ -667,6 +686,29 @@ public Builder replicaNames(String... replicaNames) { return replicaNames(List.of(replicaNames)); } + /** + * @param replicationCluster A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + * @return builder + * + */ + public Builder replicationCluster(@Nullable Output replicationCluster) { + $.replicationCluster = replicationCluster; + return this; + } + + /** + * @param replicationCluster A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + * @return builder + * + */ + public Builder replicationCluster(DatabaseInstanceReplicationClusterArgs replicationCluster) { + return replicationCluster(Output.of(replicationCluster)); + } + /** * @param restoreBackupContext The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstance.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstance.java index ec8ec7c06b..cc9b6f9fa3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstance.java @@ -178,16 +178,14 @@ public Output> clientKey() { return Codegen.optional(this.clientKey); } /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ @Export(name="databaseVersion", refs={String.class}, tree="[0]") private Output databaseVersion; /** - * @return The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @return The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ public Output databaseVersion() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstanceArgs.java index bac637808e..05d253cf10 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/SourceRepresentationInstanceArgs.java @@ -63,16 +63,14 @@ public Optional> clientKey() { } /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ @Import(name="databaseVersion", required=true) private Output databaseVersion; /** - * @return The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @return The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ public Output databaseVersion() { @@ -310,8 +308,7 @@ public Builder clientKey(String clientKey) { } /** - * @param databaseVersion The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @param databaseVersion The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * * @return builder * @@ -322,8 +319,7 @@ public Builder databaseVersion(Output databaseVersion) { } /** - * @param databaseVersion The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @param databaseVersion The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceReplicationClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceReplicationClusterArgs.java new file mode 100644 index 0000000000..dc94ec7b36 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceReplicationClusterArgs.java @@ -0,0 +1,121 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.sql.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DatabaseInstanceReplicationClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final DatabaseInstanceReplicationClusterArgs Empty = new DatabaseInstanceReplicationClusterArgs(); + + /** + * Read-only field that indicates whether the replica is a DR replica. + * + */ + @Import(name="drReplica") + private @Nullable Output drReplica; + + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + public Optional> drReplica() { + return Optional.ofNullable(this.drReplica); + } + + /** + * If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + @Import(name="failoverDrReplicaName") + private @Nullable Output failoverDrReplicaName; + + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + public Optional> failoverDrReplicaName() { + return Optional.ofNullable(this.failoverDrReplicaName); + } + + private DatabaseInstanceReplicationClusterArgs() {} + + private DatabaseInstanceReplicationClusterArgs(DatabaseInstanceReplicationClusterArgs $) { + this.drReplica = $.drReplica; + this.failoverDrReplicaName = $.failoverDrReplicaName; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DatabaseInstanceReplicationClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DatabaseInstanceReplicationClusterArgs $; + + public Builder() { + $ = new DatabaseInstanceReplicationClusterArgs(); + } + + public Builder(DatabaseInstanceReplicationClusterArgs defaults) { + $ = new DatabaseInstanceReplicationClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param drReplica Read-only field that indicates whether the replica is a DR replica. + * + * @return builder + * + */ + public Builder drReplica(@Nullable Output drReplica) { + $.drReplica = drReplica; + return this; + } + + /** + * @param drReplica Read-only field that indicates whether the replica is a DR replica. + * + * @return builder + * + */ + public Builder drReplica(Boolean drReplica) { + return drReplica(Output.of(drReplica)); + } + + /** + * @param failoverDrReplicaName If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + * @return builder + * + */ + public Builder failoverDrReplicaName(@Nullable Output failoverDrReplicaName) { + $.failoverDrReplicaName = failoverDrReplicaName; + return this; + } + + /** + * @param failoverDrReplicaName If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + * @return builder + * + */ + public Builder failoverDrReplicaName(String failoverDrReplicaName) { + return failoverDrReplicaName(Output.of(failoverDrReplicaName)); + } + + public DatabaseInstanceReplicationClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceState.java index 3fea301f9f..6b6591119a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/DatabaseInstanceState.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.sql.inputs.DatabaseInstanceCloneArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceIpAddressArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceReplicaConfigurationArgs; +import com.pulumi.gcp.sql.inputs.DatabaseInstanceReplicationClusterArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceRestoreBackupContextArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceServerCaCertArgs; import com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs; @@ -373,6 +374,23 @@ public Optional>> replicaNames() { return Optional.ofNullable(this.replicaNames); } + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + @Import(name="replicationCluster") + private @Nullable Output replicationCluster; + + /** + * @return A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + */ + public Optional> replicationCluster() { + return Optional.ofNullable(this.replicationCluster); + } + /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -488,6 +506,7 @@ private DatabaseInstanceState(DatabaseInstanceState $) { this.region = $.region; this.replicaConfiguration = $.replicaConfiguration; this.replicaNames = $.replicaNames; + this.replicationCluster = $.replicationCluster; this.restoreBackupContext = $.restoreBackupContext; this.rootPassword = $.rootPassword; this.selfLink = $.selfLink; @@ -1004,6 +1023,29 @@ public Builder replicaNames(String... replicaNames) { return replicaNames(List.of(replicaNames)); } + /** + * @param replicationCluster A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + * @return builder + * + */ + public Builder replicationCluster(@Nullable Output replicationCluster) { + $.replicationCluster = replicationCluster; + return this; + } + + /** + * @param replicationCluster A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + * + * @return builder + * + */ + public Builder replicationCluster(DatabaseInstanceReplicationClusterArgs replicationCluster) { + return replicationCluster(Output.of(replicationCluster)); + } + /** * @param restoreBackupContext The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/SourceRepresentationInstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/SourceRepresentationInstanceState.java index c3183415da..6eaa6936e7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/SourceRepresentationInstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/inputs/SourceRepresentationInstanceState.java @@ -62,16 +62,14 @@ public Optional> clientKey() { } /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ @Import(name="databaseVersion") private @Nullable Output databaseVersion; /** - * @return The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @return The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * */ public Optional> databaseVersion() { @@ -309,8 +307,7 @@ public Builder clientKey(String clientKey) { } /** - * @param databaseVersion The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @param databaseVersion The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * * @return builder * @@ -321,8 +318,7 @@ public Builder databaseVersion(@Nullable Output databaseVersion) { } /** - * @param databaseVersion The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * @param databaseVersion The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceReplicationCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceReplicationCluster.java new file mode 100644 index 0000000000..e1e0671760 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/DatabaseInstanceReplicationCluster.java @@ -0,0 +1,79 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.sql.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class DatabaseInstanceReplicationCluster { + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + private @Nullable Boolean drReplica; + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + private @Nullable String failoverDrReplicaName; + + private DatabaseInstanceReplicationCluster() {} + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + public Optional drReplica() { + return Optional.ofNullable(this.drReplica); + } + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + public Optional failoverDrReplicaName() { + return Optional.ofNullable(this.failoverDrReplicaName); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(DatabaseInstanceReplicationCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean drReplica; + private @Nullable String failoverDrReplicaName; + public Builder() {} + public Builder(DatabaseInstanceReplicationCluster defaults) { + Objects.requireNonNull(defaults); + this.drReplica = defaults.drReplica; + this.failoverDrReplicaName = defaults.failoverDrReplicaName; + } + + @CustomType.Setter + public Builder drReplica(@Nullable Boolean drReplica) { + + this.drReplica = drReplica; + return this; + } + @CustomType.Setter + public Builder failoverDrReplicaName(@Nullable String failoverDrReplicaName) { + + this.failoverDrReplicaName = failoverDrReplicaName; + return this; + } + public DatabaseInstanceReplicationCluster build() { + final var _resultValue = new DatabaseInstanceReplicationCluster(); + _resultValue.drReplica = drReplica; + _resultValue.failoverDrReplicaName = failoverDrReplicaName; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceReplicationCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceReplicationCluster.java new file mode 100644 index 0000000000..ce230299cd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceReplicationCluster.java @@ -0,0 +1,82 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.sql.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetDatabaseInstanceReplicationCluster { + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + private Boolean drReplica; + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + private String failoverDrReplicaName; + + private GetDatabaseInstanceReplicationCluster() {} + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + public Boolean drReplica() { + return this.drReplica; + } + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + public String failoverDrReplicaName() { + return this.failoverDrReplicaName; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetDatabaseInstanceReplicationCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean drReplica; + private String failoverDrReplicaName; + public Builder() {} + public Builder(GetDatabaseInstanceReplicationCluster defaults) { + Objects.requireNonNull(defaults); + this.drReplica = defaults.drReplica; + this.failoverDrReplicaName = defaults.failoverDrReplicaName; + } + + @CustomType.Setter + public Builder drReplica(Boolean drReplica) { + if (drReplica == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstanceReplicationCluster", "drReplica"); + } + this.drReplica = drReplica; + return this; + } + @CustomType.Setter + public Builder failoverDrReplicaName(String failoverDrReplicaName) { + if (failoverDrReplicaName == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstanceReplicationCluster", "failoverDrReplicaName"); + } + this.failoverDrReplicaName = failoverDrReplicaName; + return this; + } + public GetDatabaseInstanceReplicationCluster build() { + final var _resultValue = new GetDatabaseInstanceReplicationCluster(); + _resultValue.drReplica = drReplica; + _resultValue.failoverDrReplicaName = failoverDrReplicaName; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceResult.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceResult.java index 681692b4a9..b02ff4a6e6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstanceResult.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceClone; import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceIpAddress; import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceReplicaConfiguration; +import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceReplicationCluster; import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceRestoreBackupContext; import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceServerCaCert; import com.pulumi.gcp.sql.outputs.GetDatabaseInstanceSetting; @@ -45,6 +46,7 @@ public final class GetDatabaseInstanceResult { private String region; private List replicaConfigurations; private List replicaNames; + private List replicationClusters; private List restoreBackupContexts; private String rootPassword; private String selfLink; @@ -120,6 +122,9 @@ public List replicaConfigurations() { public List replicaNames() { return this.replicaNames; } + public List replicationClusters() { + return this.replicationClusters; + } public List restoreBackupContexts() { return this.restoreBackupContexts; } @@ -169,6 +174,7 @@ public static final class Builder { private String region; private List replicaConfigurations; private List replicaNames; + private List replicationClusters; private List restoreBackupContexts; private String rootPassword; private String selfLink; @@ -199,6 +205,7 @@ public Builder(GetDatabaseInstanceResult defaults) { this.region = defaults.region; this.replicaConfigurations = defaults.replicaConfigurations; this.replicaNames = defaults.replicaNames; + this.replicationClusters = defaults.replicationClusters; this.restoreBackupContexts = defaults.restoreBackupContexts; this.rootPassword = defaults.rootPassword; this.selfLink = defaults.selfLink; @@ -389,6 +396,17 @@ public Builder replicaNames(String... replicaNames) { return replicaNames(List.of(replicaNames)); } @CustomType.Setter + public Builder replicationClusters(List replicationClusters) { + if (replicationClusters == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstanceResult", "replicationClusters"); + } + this.replicationClusters = replicationClusters; + return this; + } + public Builder replicationClusters(GetDatabaseInstanceReplicationCluster... replicationClusters) { + return replicationClusters(List.of(replicationClusters)); + } + @CustomType.Setter public Builder restoreBackupContexts(List restoreBackupContexts) { if (restoreBackupContexts == null) { throw new MissingRequiredPropertyException("GetDatabaseInstanceResult", "restoreBackupContexts"); @@ -468,6 +486,7 @@ public GetDatabaseInstanceResult build() { _resultValue.region = region; _resultValue.replicaConfigurations = replicaConfigurations; _resultValue.replicaNames = replicaNames; + _resultValue.replicationClusters = replicationClusters; _resultValue.restoreBackupContexts = restoreBackupContexts; _resultValue.rootPassword = rootPassword; _resultValue.selfLink = selfLink; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstance.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstance.java index 258326f8a9..488a85c2e8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstance.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceClone; import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceIpAddress; import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceReplicaConfiguration; +import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceReplicationCluster; import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceRestoreBackupContext; import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceServerCaCert; import com.pulumi.gcp.sql.outputs.GetDatabaseInstancesInstanceSetting; @@ -90,6 +91,11 @@ public final class GetDatabaseInstancesInstance { * */ private List replicaNames; + /** + * @return A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + * + */ + private List replicationClusters; private List restoreBackupContexts; /** * @return Initial root password. Required for MS SQL Server. @@ -226,6 +232,13 @@ public List replicaConfigurati public List replicaNames() { return this.replicaNames; } + /** + * @return A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + * + */ + public List replicationClusters() { + return this.replicationClusters; + } public List restoreBackupContexts() { return this.restoreBackupContexts; } @@ -290,6 +303,7 @@ public static final class Builder { private String region; private List replicaConfigurations; private List replicaNames; + private List replicationClusters; private List restoreBackupContexts; private String rootPassword; private String selfLink; @@ -319,6 +333,7 @@ public Builder(GetDatabaseInstancesInstance defaults) { this.region = defaults.region; this.replicaConfigurations = defaults.replicaConfigurations; this.replicaNames = defaults.replicaNames; + this.replicationClusters = defaults.replicationClusters; this.restoreBackupContexts = defaults.restoreBackupContexts; this.rootPassword = defaults.rootPassword; this.selfLink = defaults.selfLink; @@ -503,6 +518,17 @@ public Builder replicaNames(String... replicaNames) { return replicaNames(List.of(replicaNames)); } @CustomType.Setter + public Builder replicationClusters(List replicationClusters) { + if (replicationClusters == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstancesInstance", "replicationClusters"); + } + this.replicationClusters = replicationClusters; + return this; + } + public Builder replicationClusters(GetDatabaseInstancesInstanceReplicationCluster... replicationClusters) { + return replicationClusters(List.of(replicationClusters)); + } + @CustomType.Setter public Builder restoreBackupContexts(List restoreBackupContexts) { if (restoreBackupContexts == null) { throw new MissingRequiredPropertyException("GetDatabaseInstancesInstance", "restoreBackupContexts"); @@ -581,6 +607,7 @@ public GetDatabaseInstancesInstance build() { _resultValue.region = region; _resultValue.replicaConfigurations = replicaConfigurations; _resultValue.replicaNames = replicaNames; + _resultValue.replicationClusters = replicationClusters; _resultValue.restoreBackupContexts = restoreBackupContexts; _resultValue.rootPassword = rootPassword; _resultValue.selfLink = selfLink; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceReplicationCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceReplicationCluster.java new file mode 100644 index 0000000000..ed8c6676e6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/outputs/GetDatabaseInstancesInstanceReplicationCluster.java @@ -0,0 +1,82 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.sql.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetDatabaseInstancesInstanceReplicationCluster { + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + private Boolean drReplica; + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + private String failoverDrReplicaName; + + private GetDatabaseInstancesInstanceReplicationCluster() {} + /** + * @return Read-only field that indicates whether the replica is a DR replica. + * + */ + public Boolean drReplica() { + return this.drReplica; + } + /** + * @return If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + * + */ + public String failoverDrReplicaName() { + return this.failoverDrReplicaName; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetDatabaseInstancesInstanceReplicationCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean drReplica; + private String failoverDrReplicaName; + public Builder() {} + public Builder(GetDatabaseInstancesInstanceReplicationCluster defaults) { + Objects.requireNonNull(defaults); + this.drReplica = defaults.drReplica; + this.failoverDrReplicaName = defaults.failoverDrReplicaName; + } + + @CustomType.Setter + public Builder drReplica(Boolean drReplica) { + if (drReplica == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstancesInstanceReplicationCluster", "drReplica"); + } + this.drReplica = drReplica; + return this; + } + @CustomType.Setter + public Builder failoverDrReplicaName(String failoverDrReplicaName) { + if (failoverDrReplicaName == null) { + throw new MissingRequiredPropertyException("GetDatabaseInstancesInstanceReplicationCluster", "failoverDrReplicaName"); + } + this.failoverDrReplicaName = failoverDrReplicaName; + return this; + } + public GetDatabaseInstancesInstanceReplicationCluster build() { + final var _resultValue = new GetDatabaseInstancesInstanceReplicationCluster(); + _resultValue.drReplica = drReplica; + _resultValue.failoverDrReplicaName = failoverDrReplicaName; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java index c89ae2caf9..e90db0291c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java @@ -170,7 +170,7 @@ * final var project = OrganizationsFunctions.getProject(); * * var endpoint = new AiEndpoint("endpoint", AiEndpointArgs.builder() - * .name("endpoint-name_89313") + * .name("endpoint-name_60646") * .displayName("sample-endpoint") * .description("A sample vertex endpoint") * .location("us-central1") @@ -216,7 +216,7 @@ * * public static void stack(Context ctx) { * var endpoint = new AiEndpoint("endpoint", AiEndpointArgs.builder() - * .name("endpoint-name_60646") + * .name("endpoint-name_9394") * .displayName("sample-endpoint") * .description("A sample vertex endpoint") * .location("us-central1") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java index c916a73012..ed5ddaf41c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java @@ -328,8 +328,8 @@ * final var testProject = OrganizationsFunctions.getProject(); * * var project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test_9394") - * .name("tf-test_11380") + * .projectId("tf-test_11380") + * .name("tf-test_35305") * .orgId("123456789") * .billingAccount("000000-0000000-0000000-000000") * .deletionPolicy("DELETE") diff --git a/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts b/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts index 63237892f2..cb649522d5 100644 --- a/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts +++ b/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts @@ -124,6 +124,10 @@ export class AccessLevelCondition extends pulumi.CustomResource { * - - - */ public readonly accessLevel!: pulumi.Output; + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * Device specific restrictions, all restrictions must hold for * the Condition to be true. If not specified, all devices are @@ -194,6 +198,7 @@ export class AccessLevelCondition extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as AccessLevelConditionState | undefined; resourceInputs["accessLevel"] = state ? state.accessLevel : undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["devicePolicy"] = state ? state.devicePolicy : undefined; resourceInputs["ipSubnetworks"] = state ? state.ipSubnetworks : undefined; resourceInputs["members"] = state ? state.members : undefined; @@ -214,6 +219,7 @@ export class AccessLevelCondition extends pulumi.CustomResource { resourceInputs["regions"] = args ? args.regions : undefined; resourceInputs["requiredAccessLevels"] = args ? args.requiredAccessLevels : undefined; resourceInputs["vpcNetworkSources"] = args ? args.vpcNetworkSources : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(AccessLevelCondition.__pulumiType, name, resourceInputs, opts); @@ -231,6 +237,10 @@ export interface AccessLevelConditionState { * - - - */ accessLevel?: pulumi.Input; + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * Device specific restrictions, all restrictions must hold for * the Condition to be true. If not specified, all devices are diff --git a/sdk/nodejs/accesscontextmanager/egressPolicy.ts b/sdk/nodejs/accesscontextmanager/egressPolicy.ts index 7001acac53..3741d01fc1 100644 --- a/sdk/nodejs/accesscontextmanager/egressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/egressPolicy.ts @@ -51,6 +51,10 @@ export class EgressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === EgressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * The name of the Service Perimeter to add this resource to. * @@ -76,6 +80,7 @@ export class EgressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as EgressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["egressPolicyName"] = state ? state.egressPolicyName : undefined; resourceInputs["resource"] = state ? state.resource : undefined; } else { @@ -88,6 +93,7 @@ export class EgressPolicy extends pulumi.CustomResource { } resourceInputs["egressPolicyName"] = args ? args.egressPolicyName : undefined; resourceInputs["resource"] = args ? args.resource : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(EgressPolicy.__pulumiType, name, resourceInputs, opts); @@ -98,6 +104,10 @@ export class EgressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering EgressPolicy resources. */ export interface EgressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/nodejs/accesscontextmanager/ingressPolicy.ts b/sdk/nodejs/accesscontextmanager/ingressPolicy.ts index ade0a333ac..5df746d623 100644 --- a/sdk/nodejs/accesscontextmanager/ingressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/ingressPolicy.ts @@ -51,6 +51,10 @@ export class IngressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === IngressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * The name of the Service Perimeter to add this resource to. * @@ -76,6 +80,7 @@ export class IngressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as IngressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["ingressPolicyName"] = state ? state.ingressPolicyName : undefined; resourceInputs["resource"] = state ? state.resource : undefined; } else { @@ -88,6 +93,7 @@ export class IngressPolicy extends pulumi.CustomResource { } resourceInputs["ingressPolicyName"] = args ? args.ingressPolicyName : undefined; resourceInputs["resource"] = args ? args.resource : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(IngressPolicy.__pulumiType, name, resourceInputs, opts); @@ -98,6 +104,10 @@ export class IngressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering IngressPolicy resources. */ export interface IngressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts index a1296c11d5..69715a7381 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts @@ -59,6 +59,10 @@ export class ServicePerimeterDryRunEgressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterDryRunEgressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. @@ -91,6 +95,7 @@ export class ServicePerimeterDryRunEgressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterDryRunEgressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["egressFrom"] = state ? state.egressFrom : undefined; resourceInputs["egressTo"] = state ? state.egressTo : undefined; resourceInputs["perimeter"] = state ? state.perimeter : undefined; @@ -102,6 +107,7 @@ export class ServicePerimeterDryRunEgressPolicy extends pulumi.CustomResource { resourceInputs["egressFrom"] = args ? args.egressFrom : undefined; resourceInputs["egressTo"] = args ? args.egressTo : undefined; resourceInputs["perimeter"] = args ? args.perimeter : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterDryRunEgressPolicy.__pulumiType, name, resourceInputs, opts); @@ -112,6 +118,10 @@ export class ServicePerimeterDryRunEgressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterDryRunEgressPolicy resources. */ export interface ServicePerimeterDryRunEgressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts index f4ab3f3e07..bd9a0d9675 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts @@ -60,6 +60,10 @@ export class ServicePerimeterDryRunIngressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterDryRunIngressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. @@ -93,6 +97,7 @@ export class ServicePerimeterDryRunIngressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterDryRunIngressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["ingressFrom"] = state ? state.ingressFrom : undefined; resourceInputs["ingressTo"] = state ? state.ingressTo : undefined; resourceInputs["perimeter"] = state ? state.perimeter : undefined; @@ -104,6 +109,7 @@ export class ServicePerimeterDryRunIngressPolicy extends pulumi.CustomResource { resourceInputs["ingressFrom"] = args ? args.ingressFrom : undefined; resourceInputs["ingressTo"] = args ? args.ingressTo : undefined; resourceInputs["perimeter"] = args ? args.perimeter : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterDryRunIngressPolicy.__pulumiType, name, resourceInputs, opts); @@ -114,6 +120,10 @@ export class ServicePerimeterDryRunIngressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterDryRunIngressPolicy resources. */ export interface ServicePerimeterDryRunIngressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunResource.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunResource.ts index da44abf036..1c41b2a49c 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunResource.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunResource.ts @@ -94,6 +94,10 @@ export class ServicePerimeterDryRunResource extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterDryRunResource.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * The name of the Service Perimeter to add this resource to. * @@ -121,6 +125,7 @@ export class ServicePerimeterDryRunResource extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterDryRunResourceState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["perimeterName"] = state ? state.perimeterName : undefined; resourceInputs["resource"] = state ? state.resource : undefined; } else { @@ -133,6 +138,7 @@ export class ServicePerimeterDryRunResource extends pulumi.CustomResource { } resourceInputs["perimeterName"] = args ? args.perimeterName : undefined; resourceInputs["resource"] = args ? args.resource : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterDryRunResource.__pulumiType, name, resourceInputs, opts); @@ -143,6 +149,10 @@ export class ServicePerimeterDryRunResource extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterDryRunResource resources. */ export interface ServicePerimeterDryRunResourceState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts index 95b28a884e..a715a233b4 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts @@ -59,6 +59,10 @@ export class ServicePerimeterEgressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterEgressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. @@ -91,6 +95,7 @@ export class ServicePerimeterEgressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterEgressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["egressFrom"] = state ? state.egressFrom : undefined; resourceInputs["egressTo"] = state ? state.egressTo : undefined; resourceInputs["perimeter"] = state ? state.perimeter : undefined; @@ -102,6 +107,7 @@ export class ServicePerimeterEgressPolicy extends pulumi.CustomResource { resourceInputs["egressFrom"] = args ? args.egressFrom : undefined; resourceInputs["egressTo"] = args ? args.egressTo : undefined; resourceInputs["perimeter"] = args ? args.perimeter : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterEgressPolicy.__pulumiType, name, resourceInputs, opts); @@ -112,6 +118,10 @@ export class ServicePerimeterEgressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterEgressPolicy resources. */ export interface ServicePerimeterEgressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * Defines conditions on the source of a request causing this `EgressPolicy` to apply. * Structure is documented below. diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts index d7e9cee7a7..7d209ae676 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts @@ -60,6 +60,10 @@ export class ServicePerimeterIngressPolicy extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterIngressPolicy.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. @@ -93,6 +97,7 @@ export class ServicePerimeterIngressPolicy extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterIngressPolicyState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; resourceInputs["ingressFrom"] = state ? state.ingressFrom : undefined; resourceInputs["ingressTo"] = state ? state.ingressTo : undefined; resourceInputs["perimeter"] = state ? state.perimeter : undefined; @@ -104,6 +109,7 @@ export class ServicePerimeterIngressPolicy extends pulumi.CustomResource { resourceInputs["ingressFrom"] = args ? args.ingressFrom : undefined; resourceInputs["ingressTo"] = args ? args.ingressTo : undefined; resourceInputs["perimeter"] = args ? args.perimeter : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterIngressPolicy.__pulumiType, name, resourceInputs, opts); @@ -114,6 +120,10 @@ export class ServicePerimeterIngressPolicy extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterIngressPolicy resources. */ export interface ServicePerimeterIngressPolicyState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; /** * Defines the conditions on the source of a request causing this `IngressPolicy` * to apply. diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterResource.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterResource.ts index 9074504b57..d79be8cf3b 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterResource.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterResource.ts @@ -93,6 +93,14 @@ export class ServicePerimeterResource extends pulumi.CustomResource { return obj['__pulumiType'] === ServicePerimeterResource.__pulumiType; } + /** + * The name of the Access Policy this resource belongs to. + */ + public /*out*/ readonly accessPolicyId!: pulumi.Output; + /** + * The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + */ + public /*out*/ readonly etag!: pulumi.Output; /** * The name of the Service Perimeter to add this resource to. * @@ -120,6 +128,8 @@ export class ServicePerimeterResource extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as ServicePerimeterResourceState | undefined; + resourceInputs["accessPolicyId"] = state ? state.accessPolicyId : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; resourceInputs["perimeterName"] = state ? state.perimeterName : undefined; resourceInputs["resource"] = state ? state.resource : undefined; } else { @@ -132,6 +142,8 @@ export class ServicePerimeterResource extends pulumi.CustomResource { } resourceInputs["perimeterName"] = args ? args.perimeterName : undefined; resourceInputs["resource"] = args ? args.resource : undefined; + resourceInputs["accessPolicyId"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(ServicePerimeterResource.__pulumiType, name, resourceInputs, opts); @@ -142,6 +154,14 @@ export class ServicePerimeterResource extends pulumi.CustomResource { * Input properties used for looking up and filtering ServicePerimeterResource resources. */ export interface ServicePerimeterResourceState { + /** + * The name of the Access Policy this resource belongs to. + */ + accessPolicyId?: pulumi.Input; + /** + * The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + */ + etag?: pulumi.Input; /** * The name of the Service Perimeter to add this resource to. * diff --git a/sdk/nodejs/apigee/environmentAddonsConfig.ts b/sdk/nodejs/apigee/environmentAddonsConfig.ts new file mode 100644 index 0000000000..f971e7c51e --- /dev/null +++ b/sdk/nodejs/apigee/environmentAddonsConfig.ts @@ -0,0 +1,133 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Enable/Disable add-ons for an Apigee environment. + * + * To get more information about EnvironmentAddonsConfig, see: + * + * * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) + * * How-to Guides + * * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) + * + * ## Example Usage + * + * ## Import + * + * EnvironmentAddonsConfig can be imported using any of these accepted formats: + * + * * `{{env_id}}` + * + * When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} + * ``` + */ +export class EnvironmentAddonsConfig extends pulumi.CustomResource { + /** + * Get an existing EnvironmentAddonsConfig resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: EnvironmentAddonsConfigState, opts?: pulumi.CustomResourceOptions): EnvironmentAddonsConfig { + return new EnvironmentAddonsConfig(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig'; + + /** + * Returns true if the given object is an instance of EnvironmentAddonsConfig. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is EnvironmentAddonsConfig { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === EnvironmentAddonsConfig.__pulumiType; + } + + /** + * Flag to enable/disable Analytics. + */ + public readonly analyticsEnabled!: pulumi.Output; + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * + * - - - + */ + public readonly envId!: pulumi.Output; + + /** + * Create a EnvironmentAddonsConfig resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: EnvironmentAddonsConfigArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: EnvironmentAddonsConfigArgs | EnvironmentAddonsConfigState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as EnvironmentAddonsConfigState | undefined; + resourceInputs["analyticsEnabled"] = state ? state.analyticsEnabled : undefined; + resourceInputs["envId"] = state ? state.envId : undefined; + } else { + const args = argsOrState as EnvironmentAddonsConfigArgs | undefined; + if ((!args || args.envId === undefined) && !opts.urn) { + throw new Error("Missing required property 'envId'"); + } + resourceInputs["analyticsEnabled"] = args ? args.analyticsEnabled : undefined; + resourceInputs["envId"] = args ? args.envId : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(EnvironmentAddonsConfig.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering EnvironmentAddonsConfig resources. + */ +export interface EnvironmentAddonsConfigState { + /** + * Flag to enable/disable Analytics. + */ + analyticsEnabled?: pulumi.Input; + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * + * - - - + */ + envId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a EnvironmentAddonsConfig resource. + */ +export interface EnvironmentAddonsConfigArgs { + /** + * Flag to enable/disable Analytics. + */ + analyticsEnabled?: pulumi.Input; + /** + * The Apigee environment group associated with the Apigee environment, + * in the format `organizations/{{org_name}}/environments/{{env_name}}`. + * + * + * - - - + */ + envId: pulumi.Input; +} diff --git a/sdk/nodejs/apigee/index.ts b/sdk/nodejs/apigee/index.ts index 105190b885..560ba821e1 100644 --- a/sdk/nodejs/apigee/index.ts +++ b/sdk/nodejs/apigee/index.ts @@ -55,6 +55,11 @@ export type Environment = import("./environment").Environment; export const Environment: typeof import("./environment").Environment = null as any; utilities.lazyLoad(exports, ["Environment"], () => require("./environment")); +export { EnvironmentAddonsConfigArgs, EnvironmentAddonsConfigState } from "./environmentAddonsConfig"; +export type EnvironmentAddonsConfig = import("./environmentAddonsConfig").EnvironmentAddonsConfig; +export const EnvironmentAddonsConfig: typeof import("./environmentAddonsConfig").EnvironmentAddonsConfig = null as any; +utilities.lazyLoad(exports, ["EnvironmentAddonsConfig"], () => require("./environmentAddonsConfig")); + export { EnvironmentIamBindingArgs, EnvironmentIamBindingState } from "./environmentIamBinding"; export type EnvironmentIamBinding = import("./environmentIamBinding").EnvironmentIamBinding; export const EnvironmentIamBinding: typeof import("./environmentIamBinding").EnvironmentIamBinding = null as any; @@ -170,6 +175,8 @@ const _module = { return new EnvReferences(name, undefined, { urn }) case "gcp:apigee/environment:Environment": return new Environment(name, undefined, { urn }) + case "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig": + return new EnvironmentAddonsConfig(name, undefined, { urn }) case "gcp:apigee/environmentIamBinding:EnvironmentIamBinding": return new EnvironmentIamBinding(name, undefined, { urn }) case "gcp:apigee/environmentIamMember:EnvironmentIamMember": @@ -219,6 +226,7 @@ pulumi.runtime.registerResourceModule("gcp", "apigee/envGroupAttachment", _modul pulumi.runtime.registerResourceModule("gcp", "apigee/envKeystore", _module) pulumi.runtime.registerResourceModule("gcp", "apigee/envReferences", _module) pulumi.runtime.registerResourceModule("gcp", "apigee/environment", _module) +pulumi.runtime.registerResourceModule("gcp", "apigee/environmentAddonsConfig", _module) pulumi.runtime.registerResourceModule("gcp", "apigee/environmentIamBinding", _module) pulumi.runtime.registerResourceModule("gcp", "apigee/environmentIamMember", _module) pulumi.runtime.registerResourceModule("gcp", "apigee/environmentIamPolicy", _module) diff --git a/sdk/nodejs/artifactregistry/repository.ts b/sdk/nodejs/artifactregistry/repository.ts index a9ea9f42a5..8e5fc476d6 100644 --- a/sdk/nodejs/artifactregistry/repository.ts +++ b/sdk/nodejs/artifactregistry/repository.ts @@ -201,6 +201,21 @@ import * as utilities from "../utilities"; * cleanupPolicyDryRun: false, * cleanupPolicies: [ * { + * id: "delete-untagged", + * action: "DELETE", + * condition: { + * tagState: "UNTAGGED", + * }, + * }, + * { + * id: "keep-new-untagged", + * action: "KEEP", + * condition: { + * tagState: "UNTAGGED", + * newerThan: "7d", + * }, + * }, + * { * id: "delete-prerelease", * action: "DELETE", * condition: { @@ -209,7 +224,7 @@ import * as utilities from "../utilities"; * "alpha", * "v0", * ], - * olderThan: "2592000s", + * olderThan: "30d", * }, * }, * { diff --git a/sdk/nodejs/bigquery/connection.ts b/sdk/nodejs/bigquery/connection.ts index 34a9214c40..dfcf6bd1b3 100644 --- a/sdk/nodejs/bigquery/connection.ts +++ b/sdk/nodejs/bigquery/connection.ts @@ -249,7 +249,7 @@ import * as utilities from "../utilities"; * const user = new gcp.sql.User("user", { * name: "user", * instance: instance.name, - * password: "tf-test-my-password_77884", + * password: "tf-test-my-password_15222", * }); * const bqSa = gcp.bigquery.getDefaultServiceAccount({}); * const keySaUser = new gcp.kms.CryptoKeyIAMMember("key_sa_user", { diff --git a/sdk/nodejs/bigquery/routine.ts b/sdk/nodejs/bigquery/routine.ts index 987a68d2e7..52831df214 100644 --- a/sdk/nodejs/bigquery/routine.ts +++ b/sdk/nodejs/bigquery/routine.ts @@ -196,7 +196,7 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const test = new gcp.bigquery.Dataset("test", {datasetId: "tf_test_dataset_id_15222"}); + * const test = new gcp.bigquery.Dataset("test", {datasetId: "tf_test_dataset_id_81126"}); * const customMaskingRoutine = new gcp.bigquery.Routine("custom_masking_routine", { * datasetId: test.datasetId, * routineId: "custom_masking_routine", diff --git a/sdk/nodejs/billing/projectInfo.ts b/sdk/nodejs/billing/projectInfo.ts index 28b554d126..973e63a10d 100644 --- a/sdk/nodejs/billing/projectInfo.ts +++ b/sdk/nodejs/billing/projectInfo.ts @@ -22,8 +22,8 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test_81126", - * name: "tf-test_88717", + * projectId: "tf-test_88717", + * name: "tf-test_85794", * orgId: "123456789", * deletionPolicy: "DELETE", * }); diff --git a/sdk/nodejs/chronicle/dataAccessLabel.ts b/sdk/nodejs/chronicle/dataAccessLabel.ts index e456db7a1d..985c1e1249 100644 --- a/sdk/nodejs/chronicle/dataAccessLabel.ts +++ b/sdk/nodejs/chronicle/dataAccessLabel.ts @@ -84,9 +84,9 @@ export class DataAccessLabel extends pulumi.CustomResource { public /*out*/ readonly createTime!: pulumi.Output; /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * * - - - @@ -203,9 +203,9 @@ export interface DataAccessLabelState { createTime?: pulumi.Input; /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * * - - - @@ -258,9 +258,9 @@ export interface DataAccessLabelState { export interface DataAccessLabelArgs { /** * Required. The ID to use for the data access label, which will become the label's - * display name and the final component of the label's resource name. It must - * only contain ASCII lowercase letters, numbers, and dashes; it must begin - * with a letter, and it must not exceed 1000 characters. + * display name and the final component of the label's resource name. The + * maximum number of characters should be 63. Regex pattern is as per AIP: + * https://google.aip.dev/122#resource-id-segments * * * - - - diff --git a/sdk/nodejs/chronicle/index.ts b/sdk/nodejs/chronicle/index.ts index 1fd981704c..c3af1e35e7 100644 --- a/sdk/nodejs/chronicle/index.ts +++ b/sdk/nodejs/chronicle/index.ts @@ -15,6 +15,21 @@ export type DataAccessScope = import("./dataAccessScope").DataAccessScope; export const DataAccessScope: typeof import("./dataAccessScope").DataAccessScope = null as any; utilities.lazyLoad(exports, ["DataAccessScope"], () => require("./dataAccessScope")); +export { ReferenceListArgs, ReferenceListState } from "./referenceList"; +export type ReferenceList = import("./referenceList").ReferenceList; +export const ReferenceList: typeof import("./referenceList").ReferenceList = null as any; +utilities.lazyLoad(exports, ["ReferenceList"], () => require("./referenceList")); + +export { RuleArgs, RuleState } from "./rule"; +export type Rule = import("./rule").Rule; +export const Rule: typeof import("./rule").Rule = null as any; +utilities.lazyLoad(exports, ["Rule"], () => require("./rule")); + +export { RuleDeploymentArgs, RuleDeploymentState } from "./ruleDeployment"; +export type RuleDeployment = import("./ruleDeployment").RuleDeployment; +export const RuleDeployment: typeof import("./ruleDeployment").RuleDeployment = null as any; +utilities.lazyLoad(exports, ["RuleDeployment"], () => require("./ruleDeployment")); + export { WatchlistArgs, WatchlistState } from "./watchlist"; export type Watchlist = import("./watchlist").Watchlist; export const Watchlist: typeof import("./watchlist").Watchlist = null as any; @@ -29,6 +44,12 @@ const _module = { return new DataAccessLabel(name, undefined, { urn }) case "gcp:chronicle/dataAccessScope:DataAccessScope": return new DataAccessScope(name, undefined, { urn }) + case "gcp:chronicle/referenceList:ReferenceList": + return new ReferenceList(name, undefined, { urn }) + case "gcp:chronicle/rule:Rule": + return new Rule(name, undefined, { urn }) + case "gcp:chronicle/ruleDeployment:RuleDeployment": + return new RuleDeployment(name, undefined, { urn }) case "gcp:chronicle/watchlist:Watchlist": return new Watchlist(name, undefined, { urn }) default: @@ -38,4 +59,7 @@ const _module = { }; pulumi.runtime.registerResourceModule("gcp", "chronicle/dataAccessLabel", _module) pulumi.runtime.registerResourceModule("gcp", "chronicle/dataAccessScope", _module) +pulumi.runtime.registerResourceModule("gcp", "chronicle/referenceList", _module) +pulumi.runtime.registerResourceModule("gcp", "chronicle/rule", _module) +pulumi.runtime.registerResourceModule("gcp", "chronicle/ruleDeployment", _module) pulumi.runtime.registerResourceModule("gcp", "chronicle/watchlist", _module) diff --git a/sdk/nodejs/chronicle/referenceList.ts b/sdk/nodejs/chronicle/referenceList.ts new file mode 100644 index 0000000000..7746d4882a --- /dev/null +++ b/sdk/nodejs/chronicle/referenceList.ts @@ -0,0 +1,330 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Chronicle Referencelist Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = new gcp.chronicle.ReferenceList("example", { + * location: "us", + * instance: "00000000-0000-0000-0000-000000000000", + * referenceListId: "reference_list_id", + * description: "referencelist-description", + * entries: [{ + * value: "referencelist-entry-value", + * }], + * syntaxType: "REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING", + * }); + * ``` + * + * ## Import + * + * ReferenceList can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` + * + * * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` + * + * * `{{location}}/{{instance}}/{{reference_list_id}}` + * + * When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} + * ``` + */ +export class ReferenceList extends pulumi.CustomResource { + /** + * Get an existing ReferenceList resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ReferenceListState, opts?: pulumi.CustomResourceOptions): ReferenceList { + return new ReferenceList(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:chronicle/referenceList:ReferenceList'; + + /** + * Returns true if the given object is an instance of ReferenceList. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is ReferenceList { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ReferenceList.__pulumiType; + } + + /** + * Required. A user-provided description of the reference list. + */ + public readonly description!: pulumi.Output; + /** + * Output only. The unique display name of the reference list. + */ + public /*out*/ readonly displayName!: pulumi.Output; + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + */ + public readonly entries!: pulumi.Output; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + public readonly instance!: pulumi.Output; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + public readonly location!: pulumi.Output; + /** + * Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + */ + public /*out*/ readonly name!: pulumi.Output; + public readonly project!: pulumi.Output; + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + */ + public readonly referenceListId!: pulumi.Output; + /** + * Output only. The timestamp when the reference list was last updated. + */ + public /*out*/ readonly revisionCreateTime!: pulumi.Output; + /** + * Output only. The count of self-authored rules using the reference list. + */ + public /*out*/ readonly ruleAssociationsCount!: pulumi.Output; + /** + * Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + */ + public /*out*/ readonly rules!: pulumi.Output; + /** + * ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + */ + public /*out*/ readonly scopeInfos!: pulumi.Output; + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + */ + public readonly syntaxType!: pulumi.Output; + + /** + * Create a ReferenceList resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ReferenceListArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ReferenceListArgs | ReferenceListState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ReferenceListState | undefined; + resourceInputs["description"] = state ? state.description : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["entries"] = state ? state.entries : undefined; + resourceInputs["instance"] = state ? state.instance : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["referenceListId"] = state ? state.referenceListId : undefined; + resourceInputs["revisionCreateTime"] = state ? state.revisionCreateTime : undefined; + resourceInputs["ruleAssociationsCount"] = state ? state.ruleAssociationsCount : undefined; + resourceInputs["rules"] = state ? state.rules : undefined; + resourceInputs["scopeInfos"] = state ? state.scopeInfos : undefined; + resourceInputs["syntaxType"] = state ? state.syntaxType : undefined; + } else { + const args = argsOrState as ReferenceListArgs | undefined; + if ((!args || args.description === undefined) && !opts.urn) { + throw new Error("Missing required property 'description'"); + } + if ((!args || args.entries === undefined) && !opts.urn) { + throw new Error("Missing required property 'entries'"); + } + if ((!args || args.instance === undefined) && !opts.urn) { + throw new Error("Missing required property 'instance'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.referenceListId === undefined) && !opts.urn) { + throw new Error("Missing required property 'referenceListId'"); + } + if ((!args || args.syntaxType === undefined) && !opts.urn) { + throw new Error("Missing required property 'syntaxType'"); + } + resourceInputs["description"] = args ? args.description : undefined; + resourceInputs["entries"] = args ? args.entries : undefined; + resourceInputs["instance"] = args ? args.instance : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["referenceListId"] = args ? args.referenceListId : undefined; + resourceInputs["syntaxType"] = args ? args.syntaxType : undefined; + resourceInputs["displayName"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["revisionCreateTime"] = undefined /*out*/; + resourceInputs["ruleAssociationsCount"] = undefined /*out*/; + resourceInputs["rules"] = undefined /*out*/; + resourceInputs["scopeInfos"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ReferenceList.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ReferenceList resources. + */ +export interface ReferenceListState { + /** + * Required. A user-provided description of the reference list. + */ + description?: pulumi.Input; + /** + * Output only. The unique display name of the reference list. + */ + displayName?: pulumi.Input; + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + */ + entries?: pulumi.Input[]>; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + instance?: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location?: pulumi.Input; + /** + * Output only. The resource name of the reference list. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + */ + name?: pulumi.Input; + project?: pulumi.Input; + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + */ + referenceListId?: pulumi.Input; + /** + * Output only. The timestamp when the reference list was last updated. + */ + revisionCreateTime?: pulumi.Input; + /** + * Output only. The count of self-authored rules using the reference list. + */ + ruleAssociationsCount?: pulumi.Input; + /** + * Output only. The resource names for the associated self-authored Rules that use this + * reference list. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + */ + rules?: pulumi.Input[]>; + /** + * ScopeInfo specifies the scope info of the reference list. + * Structure is documented below. + */ + scopeInfos?: pulumi.Input[]>; + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + */ + syntaxType?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ReferenceList resource. + */ +export interface ReferenceListArgs { + /** + * Required. A user-provided description of the reference list. + */ + description: pulumi.Input; + /** + * Required. The entries of the reference list. + * When listed, they are returned in the order that was specified at creation + * or update. The combined size of the values of the reference list may not + * exceed 6MB. + * This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + * Structure is documented below. + */ + entries: pulumi.Input[]>; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + instance: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location: pulumi.Input; + project?: pulumi.Input; + /** + * Required. The ID to use for the reference list. This is also the display name for + * the reference list. It must satisfy the following requirements: + * - Starts with letter. + * - Contains only letters, numbers and underscore. + * - Has length < 256. + * - Must be unique. + */ + referenceListId: pulumi.Input; + /** + * Possible values: + * REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + * REFERENCE_LIST_SYNTAX_TYPE_REGEX + * REFERENCE_LIST_SYNTAX_TYPE_CIDR + */ + syntaxType: pulumi.Input; +} diff --git a/sdk/nodejs/chronicle/rule.ts b/sdk/nodejs/chronicle/rule.ts new file mode 100644 index 0000000000..0c570af0a6 --- /dev/null +++ b/sdk/nodejs/chronicle/rule.ts @@ -0,0 +1,536 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Chronicle Rule Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = new gcp.chronicle.Rule("example", { + * location: "us", + * instance: "00000000-0000-0000-0000-000000000000", + * deletionPolicy: "DEFAULT", + * text: "rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n", + * }); + * ``` + * ### Chronicle Rule With Force Deletion + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = new gcp.chronicle.Rule("example", { + * location: "us", + * instance: "00000000-0000-0000-0000-000000000000", + * deletionPolicy: "FORCE", + * text: "rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n", + * }); + * ``` + * ### Chronicle Rule With Data Access Scope + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const dataAccessScopeTest = new gcp.chronicle.DataAccessScope("data_access_scope_test", { + * location: "us", + * instance: "00000000-0000-0000-0000-000000000000", + * dataAccessScopeId: "scope-name", + * description: "scope-description", + * allowedDataAccessLabels: [{ + * logType: "GCP_CLOUDAUDIT", + * }], + * }); + * const example = new gcp.chronicle.Rule("example", { + * location: "us", + * instance: "00000000-0000-0000-0000-000000000000", + * scope: googleChronicleDataAccessScope.dataAccessScopeTest.name, + * text: "rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\n", + * }); + * ``` + * + * ## Import + * + * Rule can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` + * + * * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` + * + * * `{{location}}/{{instance}}/{{rule_id}}` + * + * When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} + * ``` + */ +export class Rule extends pulumi.CustomResource { + /** + * Get an existing Rule resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RuleState, opts?: pulumi.CustomResourceOptions): Rule { + return new Rule(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:chronicle/rule:Rule'; + + /** + * Returns true if the given object is an instance of Rule. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Rule { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Rule.__pulumiType; + } + + /** + * Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + */ + public /*out*/ readonly allowedRunFrequencies!: pulumi.Output; + /** + * Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + */ + public /*out*/ readonly author!: pulumi.Output; + /** + * Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + */ + public /*out*/ readonly compilationDiagnostics!: pulumi.Output; + /** + * Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + */ + public /*out*/ readonly compilationState!: pulumi.Output; + /** + * Output only. The timestamp of when the rule was created. + * Populated in FULL view. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * Output only. Resource names of the data tables used in this rule. + */ + public /*out*/ readonly dataTables!: pulumi.Output; + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + */ + public readonly deletionPolicy!: pulumi.Output; + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + */ + public /*out*/ readonly displayName!: pulumi.Output; + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + */ + public readonly etag!: pulumi.Output; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * + * - - - + */ + public readonly instance!: pulumi.Output; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + public readonly location!: pulumi.Output; + /** + * Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + */ + public /*out*/ readonly metadata!: pulumi.Output<{[key: string]: string}>; + /** + * Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + */ + public /*out*/ readonly nearRealTimeLiveRuleEligible!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + */ + public /*out*/ readonly referenceLists!: pulumi.Output; + /** + * Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + */ + public /*out*/ readonly revisionCreateTime!: pulumi.Output; + /** + * Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + */ + public /*out*/ readonly revisionId!: pulumi.Output; + /** + * Rule Id is the ID of the Rule. + */ + public readonly ruleId!: pulumi.Output; + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + */ + public readonly scope!: pulumi.Output; + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + */ + public /*out*/ readonly severities!: pulumi.Output; + /** + * The YARA-L content of the rule. + * Populated in FULL view. + */ + public readonly text!: pulumi.Output; + /** + * Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + */ + public /*out*/ readonly type!: pulumi.Output; + + /** + * Create a Rule resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RuleArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RuleArgs | RuleState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RuleState | undefined; + resourceInputs["allowedRunFrequencies"] = state ? state.allowedRunFrequencies : undefined; + resourceInputs["author"] = state ? state.author : undefined; + resourceInputs["compilationDiagnostics"] = state ? state.compilationDiagnostics : undefined; + resourceInputs["compilationState"] = state ? state.compilationState : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["dataTables"] = state ? state.dataTables : undefined; + resourceInputs["deletionPolicy"] = state ? state.deletionPolicy : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["instance"] = state ? state.instance : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["metadata"] = state ? state.metadata : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["nearRealTimeLiveRuleEligible"] = state ? state.nearRealTimeLiveRuleEligible : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["referenceLists"] = state ? state.referenceLists : undefined; + resourceInputs["revisionCreateTime"] = state ? state.revisionCreateTime : undefined; + resourceInputs["revisionId"] = state ? state.revisionId : undefined; + resourceInputs["ruleId"] = state ? state.ruleId : undefined; + resourceInputs["scope"] = state ? state.scope : undefined; + resourceInputs["severities"] = state ? state.severities : undefined; + resourceInputs["text"] = state ? state.text : undefined; + resourceInputs["type"] = state ? state.type : undefined; + } else { + const args = argsOrState as RuleArgs | undefined; + if ((!args || args.instance === undefined) && !opts.urn) { + throw new Error("Missing required property 'instance'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + resourceInputs["deletionPolicy"] = args ? args.deletionPolicy : undefined; + resourceInputs["etag"] = args ? args.etag : undefined; + resourceInputs["instance"] = args ? args.instance : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["ruleId"] = args ? args.ruleId : undefined; + resourceInputs["scope"] = args ? args.scope : undefined; + resourceInputs["text"] = args ? args.text : undefined; + resourceInputs["allowedRunFrequencies"] = undefined /*out*/; + resourceInputs["author"] = undefined /*out*/; + resourceInputs["compilationDiagnostics"] = undefined /*out*/; + resourceInputs["compilationState"] = undefined /*out*/; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["dataTables"] = undefined /*out*/; + resourceInputs["displayName"] = undefined /*out*/; + resourceInputs["metadata"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["nearRealTimeLiveRuleEligible"] = undefined /*out*/; + resourceInputs["referenceLists"] = undefined /*out*/; + resourceInputs["revisionCreateTime"] = undefined /*out*/; + resourceInputs["revisionId"] = undefined /*out*/; + resourceInputs["severities"] = undefined /*out*/; + resourceInputs["type"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Rule.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Rule resources. + */ +export interface RuleState { + /** + * Output only. The run frequencies that are allowed for the rule. + * Populated in BASIC view and FULL view. + */ + allowedRunFrequencies?: pulumi.Input[]>; + /** + * Output only. The author of the rule. Extracted from the meta section of text. + * Populated in BASIC view and FULL view. + */ + author?: pulumi.Input; + /** + * Output only. A list of a rule's corresponding compilation diagnostic messages + * such as compilation errors and compilation warnings. + * Populated in FULL view. + * Structure is documented below. + */ + compilationDiagnostics?: pulumi.Input[]>; + /** + * Output only. The current compilation state of the rule. + * Populated in FULL view. + * Possible values: + * COMPILATION_STATE_UNSPECIFIED + * SUCCEEDED + * FAILED + */ + compilationState?: pulumi.Input; + /** + * Output only. The timestamp of when the rule was created. + * Populated in FULL view. + */ + createTime?: pulumi.Input; + /** + * Output only. Resource names of the data tables used in this rule. + */ + dataTables?: pulumi.Input[]>; + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + */ + deletionPolicy?: pulumi.Input; + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + */ + displayName?: pulumi.Input; + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + */ + etag?: pulumi.Input; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * + * - - - + */ + instance?: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location?: pulumi.Input; + /** + * Output only. Additional metadata specified in the meta section of text. + * Populated in FULL view. + */ + metadata?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + name?: pulumi.Input; + /** + * Output only. Indicate the rule can run in near real time live rule. + * If this is true, the rule uses the near real time live rule when the run + * frequency is set to LIVE. + */ + nearRealTimeLiveRuleEligible?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * Output only. Resource names of the reference lists used in this rule. + * Populated in FULL view. + */ + referenceLists?: pulumi.Input[]>; + /** + * Output only. The timestamp of when the rule revision was created. + * Populated in FULL, REVISION_METADATA_ONLY views. + */ + revisionCreateTime?: pulumi.Input; + /** + * Output only. The revision ID of the rule. + * A new revision is created whenever the rule text is changed in any way. + * Format: v_{10 digits}_{9 digits} + * Populated in REVISION_METADATA_ONLY view and FULL view. + */ + revisionId?: pulumi.Input; + /** + * Rule Id is the ID of the Rule. + */ + ruleId?: pulumi.Input; + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + */ + scope?: pulumi.Input; + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + */ + severities?: pulumi.Input[]>; + /** + * The YARA-L content of the rule. + * Populated in FULL view. + */ + text?: pulumi.Input; + /** + * Possible values: + * RULE_TYPE_UNSPECIFIED + * SINGLE_EVENT + * MULTI_EVENT + */ + type?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Rule resource. + */ +export interface RuleArgs { + /** + * Policy to determine if the rule should be deleted forcefully. + * If deletionPolicy = "FORCE", any retrohunts and any detections associated with the rule + * will also be deleted. If deletionPolicy = "DEFAULT", the call will only succeed if the + * rule has no associated retrohunts, including completed retrohunts, and no + * associated detections. Regardless of this field's value, the rule + * deployment associated with this rule will also be deleted. + * Possible values: DEFAULT, FORCE + */ + deletionPolicy?: pulumi.Input; + /** + * The etag for this rule. + * If this is provided on update, the request will succeed if and only if it + * matches the server-computed value, and will fail with an ABORTED error + * otherwise. + * Populated in BASIC view and FULL view. + */ + etag?: pulumi.Input; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + * + * + * - - - + */ + instance: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * Rule Id is the ID of the Rule. + */ + ruleId?: pulumi.Input; + /** + * Resource name of the DataAccessScope bound to this rule. + * Populated in BASIC view and FULL view. + * If reference lists are used in the rule, validations will be performed + * against this scope to ensure that the reference lists are compatible with + * both the user's and the rule's scopes. + * The scope should be in the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + */ + scope?: pulumi.Input; + /** + * The YARA-L content of the rule. + * Populated in FULL view. + */ + text?: pulumi.Input; +} diff --git a/sdk/nodejs/chronicle/ruleDeployment.ts b/sdk/nodejs/chronicle/ruleDeployment.ts new file mode 100644 index 0000000000..fcc1c5cb30 --- /dev/null +++ b/sdk/nodejs/chronicle/ruleDeployment.ts @@ -0,0 +1,344 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ## Import + * + * RuleDeployment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` + * + * * `{{project}}/{{location}}/{{instance}}/{{rule}}` + * + * * `{{location}}/{{instance}}/{{rule}}` + * + * When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} + * ``` + * + * ```sh + * $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} + * ``` + */ +export class RuleDeployment extends pulumi.CustomResource { + /** + * Get an existing RuleDeployment resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RuleDeploymentState, opts?: pulumi.CustomResourceOptions): RuleDeployment { + return new RuleDeployment(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:chronicle/ruleDeployment:RuleDeployment'; + + /** + * Returns true if the given object is an instance of RuleDeployment. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RuleDeployment { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RuleDeployment.__pulumiType; + } + + /** + * Whether detections resulting from this deployment should be considered + * alerts. + */ + public readonly alerting!: pulumi.Output; + /** + * Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + */ + public /*out*/ readonly archiveTime!: pulumi.Output; + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and runFrequency cannot be + * updated. + */ + public readonly archived!: pulumi.Output; + /** + * Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + public /*out*/ readonly consumerRules!: pulumi.Output; + /** + * Whether the rule is currently deployed continuously against incoming data. + */ + public readonly enabled!: pulumi.Output; + /** + * The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + */ + public /*out*/ readonly executionState!: pulumi.Output; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + public readonly instance!: pulumi.Output; + /** + * Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + */ + public /*out*/ readonly lastAlertStatusChangeTime!: pulumi.Output; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + public readonly location!: pulumi.Output; + /** + * The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + public /*out*/ readonly producerRules!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The Rule ID of the rule. + * + * + * - - - + */ + public readonly rule!: pulumi.Output; + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + */ + public readonly runFrequency!: pulumi.Output; + + /** + * Create a RuleDeployment resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RuleDeploymentArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RuleDeploymentArgs | RuleDeploymentState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RuleDeploymentState | undefined; + resourceInputs["alerting"] = state ? state.alerting : undefined; + resourceInputs["archiveTime"] = state ? state.archiveTime : undefined; + resourceInputs["archived"] = state ? state.archived : undefined; + resourceInputs["consumerRules"] = state ? state.consumerRules : undefined; + resourceInputs["enabled"] = state ? state.enabled : undefined; + resourceInputs["executionState"] = state ? state.executionState : undefined; + resourceInputs["instance"] = state ? state.instance : undefined; + resourceInputs["lastAlertStatusChangeTime"] = state ? state.lastAlertStatusChangeTime : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["producerRules"] = state ? state.producerRules : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["rule"] = state ? state.rule : undefined; + resourceInputs["runFrequency"] = state ? state.runFrequency : undefined; + } else { + const args = argsOrState as RuleDeploymentArgs | undefined; + if ((!args || args.instance === undefined) && !opts.urn) { + throw new Error("Missing required property 'instance'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.rule === undefined) && !opts.urn) { + throw new Error("Missing required property 'rule'"); + } + resourceInputs["alerting"] = args ? args.alerting : undefined; + resourceInputs["archived"] = args ? args.archived : undefined; + resourceInputs["enabled"] = args ? args.enabled : undefined; + resourceInputs["instance"] = args ? args.instance : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["rule"] = args ? args.rule : undefined; + resourceInputs["runFrequency"] = args ? args.runFrequency : undefined; + resourceInputs["archiveTime"] = undefined /*out*/; + resourceInputs["consumerRules"] = undefined /*out*/; + resourceInputs["executionState"] = undefined /*out*/; + resourceInputs["lastAlertStatusChangeTime"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["producerRules"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(RuleDeployment.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RuleDeployment resources. + */ +export interface RuleDeploymentState { + /** + * Whether detections resulting from this deployment should be considered + * alerts. + */ + alerting?: pulumi.Input; + /** + * Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + */ + archiveTime?: pulumi.Input; + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and runFrequency cannot be + * updated. + */ + archived?: pulumi.Input; + /** + * Output only. The names of the associated/chained consumer rules. Rules are considered + * consumers of this rule if their rule text explicitly filters on this rule's ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + consumerRules?: pulumi.Input[]>; + /** + * Whether the rule is currently deployed continuously against incoming data. + */ + enabled?: pulumi.Input; + /** + * The execution state of the rule deployment. + * Possible values: + * DEFAULT + * LIMITED + * PAUSED + */ + executionState?: pulumi.Input; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + instance?: pulumi.Input; + /** + * Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + */ + lastAlertStatusChangeTime?: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location?: pulumi.Input; + /** + * The resource name of the rule deployment. + * Note that RuleDeployment is a child of the overall Rule, not any individual + * revision, so the resource ID segment for the Rule resource must not + * reference a specific revision. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + */ + name?: pulumi.Input; + /** + * Output only. The names of the associated/chained producer rules. Rules are considered + * producers for this rule if this rule explicitly filters on their ruleid. + * Format: + * projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + */ + producerRules?: pulumi.Input[]>; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The Rule ID of the rule. + * + * + * - - - + */ + rule?: pulumi.Input; + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + */ + runFrequency?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RuleDeployment resource. + */ +export interface RuleDeploymentArgs { + /** + * Whether detections resulting from this deployment should be considered + * alerts. + */ + alerting?: pulumi.Input; + /** + * The archive state of the rule deployment. + * Cannot be set to true unless enabled is set to false. + * If set to true, alerting will automatically be set to false. + * If currently set to true, enabled, alerting, and runFrequency cannot be + * updated. + */ + archived?: pulumi.Input; + /** + * Whether the rule is currently deployed continuously against incoming data. + */ + enabled?: pulumi.Input; + /** + * The unique identifier for the Chronicle instance, which is the same as the customer ID. + */ + instance: pulumi.Input; + /** + * The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + */ + location: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The Rule ID of the rule. + * + * + * - - - + */ + rule: pulumi.Input; + /** + * The run frequency of the rule deployment. + * Possible values: + * LIVE + * HOURLY + * DAILY + */ + runFrequency?: pulumi.Input; +} diff --git a/sdk/nodejs/colab/index.ts b/sdk/nodejs/colab/index.ts new file mode 100644 index 0000000000..88d3d7f08e --- /dev/null +++ b/sdk/nodejs/colab/index.ts @@ -0,0 +1,25 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { RuntimeTemplateArgs, RuntimeTemplateState } from "./runtimeTemplate"; +export type RuntimeTemplate = import("./runtimeTemplate").RuntimeTemplate; +export const RuntimeTemplate: typeof import("./runtimeTemplate").RuntimeTemplate = null as any; +utilities.lazyLoad(exports, ["RuntimeTemplate"], () => require("./runtimeTemplate")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:colab/runtimeTemplate:RuntimeTemplate": + return new RuntimeTemplate(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "colab/runtimeTemplate", _module) diff --git a/sdk/nodejs/colab/runtimeTemplate.ts b/sdk/nodejs/colab/runtimeTemplate.ts new file mode 100644 index 0000000000..53a5fb3b34 --- /dev/null +++ b/sdk/nodejs/colab/runtimeTemplate.ts @@ -0,0 +1,463 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, + * as well as common settings such as the network and whether public internet access is enabled. When you create + * a runtime, its VM is created according to the specifications of a runtime template.' + * + * To get more information about RuntimeTemplate, see: + * + * * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) + * * How-to Guides + * * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) + * + * ## Example Usage + * + * ### Colab Runtime Template Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const runtime_template = new gcp.colab.RuntimeTemplate("runtime-template", { + * name: "colab-runtime-template", + * displayName: "Runtime template basic", + * location: "us-central1", + * machineSpec: { + * machineType: "e2-standard-4", + * }, + * networkSpec: { + * enableInternetAccess: true, + * }, + * }); + * ``` + * ### Colab Runtime Template No Name + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const runtime_template = new gcp.colab.RuntimeTemplate("runtime-template", { + * displayName: "Runtime template no name", + * location: "us-central1", + * machineSpec: { + * machineType: "e2-standard-4", + * }, + * networkSpec: { + * enableInternetAccess: true, + * }, + * }); + * ``` + * ### Colab Runtime Template Full + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const myNetwork = new gcp.compute.Network("my_network", { + * name: "colab-test-default", + * autoCreateSubnetworks: false, + * }); + * const mySubnetwork = new gcp.compute.Subnetwork("my_subnetwork", { + * name: "colab-test-default", + * network: myNetwork.id, + * region: "us-central1", + * ipCidrRange: "10.0.1.0/24", + * }); + * const runtime_template = new gcp.colab.RuntimeTemplate("runtime-template", { + * name: "colab-runtime-template", + * displayName: "Runtime template full", + * location: "us-central1", + * description: "Full runtime template", + * machineSpec: { + * machineType: "n1-standard-2", + * acceleratorType: "NVIDIA_TESLA_T4", + * acceleratorCount: 1, + * }, + * dataPersistentDiskSpec: { + * diskType: "pd-standard", + * diskSizeGb: "200", + * }, + * networkSpec: { + * enableInternetAccess: true, + * network: myNetwork.id, + * subnetwork: mySubnetwork.id, + * }, + * labels: { + * k: "val", + * }, + * idleShutdownConfig: { + * idleTimeout: "3600s", + * }, + * eucConfig: { + * eucDisabled: true, + * }, + * shieldedVmConfig: { + * enableSecureBoot: true, + * }, + * networkTags: [ + * "abc", + * "def", + * ], + * encryptionSpec: { + * kmsKeyName: "my-crypto-key", + * }, + * }); + * ``` + * + * ## Import + * + * RuntimeTemplate can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` + * + * * `{{project}}/{{location}}/{{name}}` + * + * * `{{location}}/{{name}}` + * + * When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} + * ``` + */ +export class RuntimeTemplate extends pulumi.CustomResource { + /** + * Get an existing RuntimeTemplate resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RuntimeTemplateState, opts?: pulumi.CustomResourceOptions): RuntimeTemplate { + return new RuntimeTemplate(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:colab/runtimeTemplate:RuntimeTemplate'; + + /** + * Returns true if the given object is an instance of RuntimeTemplate. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RuntimeTemplate { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RuntimeTemplate.__pulumiType; + } + + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + */ + public readonly dataPersistentDiskSpec!: pulumi.Output; + /** + * The description of the Runtime Template. + */ + public readonly description!: pulumi.Output; + /** + * Required. The display name of the Runtime Template. + */ + public readonly displayName!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + */ + public readonly encryptionSpec!: pulumi.Output; + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + */ + public readonly eucConfig!: pulumi.Output; + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + */ + public readonly idleShutdownConfig!: pulumi.Output; + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * + * - - - + */ + public readonly location!: pulumi.Output; + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + */ + public readonly machineSpec!: pulumi.Output; + /** + * The resource name of the Runtime Template + */ + public readonly name!: pulumi.Output; + /** + * The network configuration for the runtime. + * Structure is documented below. + */ + public readonly networkSpec!: pulumi.Output; + /** + * Applies the given Compute Engine tags to the runtime. + */ + public readonly networkTags!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Runtime Shielded VM spec. + * Structure is documented below. + */ + public readonly shieldedVmConfig!: pulumi.Output; + + /** + * Create a RuntimeTemplate resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RuntimeTemplateArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RuntimeTemplateArgs | RuntimeTemplateState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RuntimeTemplateState | undefined; + resourceInputs["dataPersistentDiskSpec"] = state ? state.dataPersistentDiskSpec : undefined; + resourceInputs["description"] = state ? state.description : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["encryptionSpec"] = state ? state.encryptionSpec : undefined; + resourceInputs["eucConfig"] = state ? state.eucConfig : undefined; + resourceInputs["idleShutdownConfig"] = state ? state.idleShutdownConfig : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["machineSpec"] = state ? state.machineSpec : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["networkSpec"] = state ? state.networkSpec : undefined; + resourceInputs["networkTags"] = state ? state.networkTags : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["shieldedVmConfig"] = state ? state.shieldedVmConfig : undefined; + } else { + const args = argsOrState as RuntimeTemplateArgs | undefined; + if ((!args || args.displayName === undefined) && !opts.urn) { + throw new Error("Missing required property 'displayName'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + resourceInputs["dataPersistentDiskSpec"] = args ? args.dataPersistentDiskSpec : undefined; + resourceInputs["description"] = args ? args.description : undefined; + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["encryptionSpec"] = args ? args.encryptionSpec : undefined; + resourceInputs["eucConfig"] = args ? args.eucConfig : undefined; + resourceInputs["idleShutdownConfig"] = args ? args.idleShutdownConfig : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["machineSpec"] = args ? args.machineSpec : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["networkSpec"] = args ? args.networkSpec : undefined; + resourceInputs["networkTags"] = args ? args.networkTags : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["shieldedVmConfig"] = args ? args.shieldedVmConfig : undefined; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(RuntimeTemplate.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RuntimeTemplate resources. + */ +export interface RuntimeTemplateState { + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + */ + dataPersistentDiskSpec?: pulumi.Input; + /** + * The description of the Runtime Template. + */ + description?: pulumi.Input; + /** + * Required. The display name of the Runtime Template. + */ + displayName?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + */ + encryptionSpec?: pulumi.Input; + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + */ + eucConfig?: pulumi.Input; + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + */ + idleShutdownConfig?: pulumi.Input; + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * + * - - - + */ + location?: pulumi.Input; + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + */ + machineSpec?: pulumi.Input; + /** + * The resource name of the Runtime Template + */ + name?: pulumi.Input; + /** + * The network configuration for the runtime. + * Structure is documented below. + */ + networkSpec?: pulumi.Input; + /** + * Applies the given Compute Engine tags to the runtime. + */ + networkTags?: pulumi.Input[]>; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Runtime Shielded VM spec. + * Structure is documented below. + */ + shieldedVmConfig?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RuntimeTemplate resource. + */ +export interface RuntimeTemplateArgs { + /** + * The configuration for the data disk of the runtime. + * Structure is documented below. + */ + dataPersistentDiskSpec?: pulumi.Input; + /** + * The description of the Runtime Template. + */ + description?: pulumi.Input; + /** + * Required. The display name of the Runtime Template. + */ + displayName: pulumi.Input; + /** + * Customer-managed encryption key spec for the notebook runtime. + * Structure is documented below. + */ + encryptionSpec?: pulumi.Input; + /** + * EUC configuration of the NotebookRuntimeTemplate. + * Structure is documented below. + */ + eucConfig?: pulumi.Input; + /** + * Notebook Idle Shutdown configuration for the runtime. + * Structure is documented below. + */ + idleShutdownConfig?: pulumi.Input; + /** + * Labels to identify and group the runtime template. + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location for the resource: https://cloud.google.com/colab/docs/locations + * + * + * - - - + */ + location: pulumi.Input; + /** + * 'The machine configuration of the runtime.' + * Structure is documented below. + */ + machineSpec?: pulumi.Input; + /** + * The resource name of the Runtime Template + */ + name?: pulumi.Input; + /** + * The network configuration for the runtime. + * Structure is documented below. + */ + networkSpec?: pulumi.Input; + /** + * Applies the given Compute Engine tags to the runtime. + */ + networkTags?: pulumi.Input[]>; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * Runtime Shielded VM spec. + * Structure is documented below. + */ + shieldedVmConfig?: pulumi.Input; +} diff --git a/sdk/nodejs/compute/interconnectAttachment.ts b/sdk/nodejs/compute/interconnectAttachment.ts index ec2563a5ca..1c814261e9 100644 --- a/sdk/nodejs/compute/interconnectAttachment.ts +++ b/sdk/nodejs/compute/interconnectAttachment.ts @@ -142,7 +142,7 @@ export class InterconnectAttachment extends pulumi.CustomResource { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. */ public readonly bandwidth!: pulumi.Output; /** @@ -420,7 +420,7 @@ export interface InterconnectAttachmentState { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. */ bandwidth?: pulumi.Input; /** @@ -619,7 +619,7 @@ export interface InterconnectAttachmentArgs { * For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. * Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, * Defaults to BPS_10G - * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + * Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. */ bandwidth?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/route.ts b/sdk/nodejs/compute/route.ts index ae18a59567..67c5af21a0 100644 --- a/sdk/nodejs/compute/route.ts +++ b/sdk/nodejs/compute/route.ts @@ -295,8 +295,7 @@ export class Route extends pulumi.CustomResource { */ public readonly nextHopInstanceZone!: pulumi.Output; /** - * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. */ public /*out*/ readonly nextHopInterRegionCost!: pulumi.Output; /** @@ -312,8 +311,7 @@ export class Route extends pulumi.CustomResource { */ public /*out*/ readonly nextHopNetwork!: pulumi.Output; /** - * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. */ public /*out*/ readonly nextHopOrigin!: pulumi.Output; /** @@ -479,8 +477,7 @@ export interface RouteState { */ nextHopInstanceZone?: pulumi.Input; /** - * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - * distance, and available bandwidth between regions. + * Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. */ nextHopInterRegionCost?: pulumi.Input; /** @@ -496,8 +493,7 @@ export interface RouteState { */ nextHopNetwork?: pulumi.Input; /** - * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - * INCOMPLETE. + * Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. */ nextHopOrigin?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/subnetwork.ts b/sdk/nodejs/compute/subnetwork.ts index 703517673d..24a4398e36 100644 --- a/sdk/nodejs/compute/subnetwork.ts +++ b/sdk/nodejs/compute/subnetwork.ts @@ -444,7 +444,7 @@ export class Subnetwork extends pulumi.CustomResource { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. */ public readonly stackType!: pulumi.Output; /** @@ -677,7 +677,7 @@ export interface SubnetworkState { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. */ stackType?: pulumi.Input; /** @@ -810,7 +810,7 @@ export interface SubnetworkArgs { /** * The stack type for this subnet to identify whether the IPv6 feature is enabled or not. * If not specified IPV4_ONLY will be used. - * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. */ stackType?: pulumi.Input; } diff --git a/sdk/nodejs/compute/targetInstance.ts b/sdk/nodejs/compute/targetInstance.ts index 354bf80449..66a9e286f3 100644 --- a/sdk/nodejs/compute/targetInstance.ts +++ b/sdk/nodejs/compute/targetInstance.ts @@ -121,7 +121,7 @@ import * as utilities from "../utilities"; * }); * const policyddosprotection = new gcp.compute.RegionSecurityPolicy("policyddosprotection", { * region: "southamerica-west1", - * name: "tf-test-policyddos_85794", + * name: "tf-test-policyddos_21197", * description: "ddos protection security policy to set target instance", * type: "CLOUD_ARMOR_NETWORK", * ddosProtectionConfig: { @@ -130,7 +130,7 @@ import * as utilities from "../utilities"; * }); * const edgeSecService = new gcp.compute.NetworkEdgeSecurityService("edge_sec_service", { * region: "southamerica-west1", - * name: "tf-test-edgesec_21197", + * name: "tf-test-edgesec_52865", * securityPolicy: policyddosprotection.selfLink, * }); * const regionsecuritypolicy = new gcp.compute.RegionSecurityPolicy("regionsecuritypolicy", { diff --git a/sdk/nodejs/compute/urlmap.ts b/sdk/nodejs/compute/urlmap.ts index f0853930fc..ec406c6520 100644 --- a/sdk/nodejs/compute/urlmap.ts +++ b/sdk/nodejs/compute/urlmap.ts @@ -13,6 +13,8 @@ import * as utilities from "../utilities"; * To get more information about UrlMap, see: * * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) * * ## Example Usage * diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index 8afec83619..ed5512b661 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -385,6 +385,14 @@ Object.defineProperty(exports, "cloudfunctions2CustomEndpoint", { enumerable: true, }); +export declare const colabCustomEndpoint: string | undefined; +Object.defineProperty(exports, "colabCustomEndpoint", { + get() { + return __config.get("colabCustomEndpoint"); + }, + enumerable: true, +}); + export declare const composerCustomEndpoint: string | undefined; Object.defineProperty(exports, "composerCustomEndpoint", { get() { @@ -1065,6 +1073,22 @@ Object.defineProperty(exports, "parallelstoreCustomEndpoint", { enumerable: true, }); +export declare const parameterManagerCustomEndpoint: string | undefined; +Object.defineProperty(exports, "parameterManagerCustomEndpoint", { + get() { + return __config.get("parameterManagerCustomEndpoint"); + }, + enumerable: true, +}); + +export declare const parameterManagerRegionalCustomEndpoint: string | undefined; +Object.defineProperty(exports, "parameterManagerRegionalCustomEndpoint", { + get() { + return __config.get("parameterManagerRegionalCustomEndpoint"); + }, + enumerable: true, +}); + export declare const privatecaCustomEndpoint: string | undefined; Object.defineProperty(exports, "privatecaCustomEndpoint", { get() { diff --git a/sdk/nodejs/databasemigrationservice/connectionProfile.ts b/sdk/nodejs/databasemigrationservice/connectionProfile.ts index 1c4dff21d0..95d0712fa9 100644 --- a/sdk/nodejs/databasemigrationservice/connectionProfile.ts +++ b/sdk/nodejs/databasemigrationservice/connectionProfile.ts @@ -202,11 +202,11 @@ import * as utilities from "../utilities"; * foo: "bar", * }, * alloydb: { - * clusterId: "tf-test-dbmsalloycluster_52865", + * clusterId: "tf-test-dbmsalloycluster_85840", * settings: { * initialUser: { - * user: "alloyuser_85840", - * password: "alloypass_60302", + * user: "alloyuser_60302", + * password: "alloypass_22811", * }, * vpcNetwork: _default.id, * labels: { diff --git a/sdk/nodejs/dataplex/entryType.ts b/sdk/nodejs/dataplex/entryType.ts index 8944e214fa..2c9c1c5e49 100644 --- a/sdk/nodejs/dataplex/entryType.ts +++ b/sdk/nodejs/dataplex/entryType.ts @@ -30,7 +30,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const testEntryTypeFull = new gcp.dataplex.AspectType("test_entry_type_full", { - * aspectTypeId: "tf-test-aspect-type_22811", + * aspectTypeId: "tf-test-aspect-type_91042", * location: "us-central1", * project: "my-project-name", * metadataTemplate: `{ diff --git a/sdk/nodejs/dataplex/task.ts b/sdk/nodejs/dataplex/task.ts index b9d6663dcf..97e8405369 100644 --- a/sdk/nodejs/dataplex/task.ts +++ b/sdk/nodejs/dataplex/task.ts @@ -25,12 +25,12 @@ import * as utilities from "../utilities"; * * const project = gcp.organizations.getProject({}); * const example = new gcp.dataplex.Lake("example", { - * name: "tf-test-lake_91042", + * name: "tf-test-lake_72490", * location: "us-central1", * project: "my-project-name", * }); * const exampleTask = new gcp.dataplex.Task("example", { - * taskId: "tf-test-task_72490", + * taskId: "tf-test-task_89605", * location: "us-central1", * lake: example.name, * description: "Test Task Basic", @@ -65,17 +65,17 @@ import * as utilities from "../utilities"; * * // VPC network * const _default = new gcp.compute.Network("default", { - * name: "tf-test-workstation-cluster_89605", + * name: "tf-test-workstation-cluster_56730", * autoCreateSubnetworks: true, * }); * const project = gcp.organizations.getProject({}); * const exampleSpark = new gcp.dataplex.Lake("example_spark", { - * name: "tf-test-lake_56730", + * name: "tf-test-lake_95154", * location: "us-central1", * project: "my-project-name", * }); * const exampleSparkTask = new gcp.dataplex.Task("example_spark", { - * taskId: "tf-test-task_95154", + * taskId: "tf-test-task_64336", * location: "us-central1", * lake: exampleSpark.name, * triggerSpec: { @@ -124,17 +124,17 @@ import * as utilities from "../utilities"; * * // VPC network * const _default = new gcp.compute.Network("default", { - * name: "tf-test-workstation-cluster_64336", + * name: "tf-test-workstation-cluster_34962", * autoCreateSubnetworks: true, * }); * const project = gcp.organizations.getProject({}); * const exampleNotebook = new gcp.dataplex.Lake("example_notebook", { - * name: "tf-test-lake_34962", + * name: "tf-test-lake_74000", * location: "us-central1", * project: "my-project-name", * }); * const exampleNotebookTask = new gcp.dataplex.Task("example_notebook", { - * taskId: "tf-test-task_74000", + * taskId: "tf-test-task_75125", * location: "us-central1", * lake: exampleNotebook.name, * triggerSpec: { diff --git a/sdk/nodejs/dataproc/batch.ts b/sdk/nodejs/dataproc/batch.ts index 8137821fff..c5912d1851 100644 --- a/sdk/nodejs/dataproc/batch.ts +++ b/sdk/nodejs/dataproc/batch.ts @@ -25,7 +25,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const exampleBatchSpark = new gcp.dataproc.Batch("example_batch_spark", { - * batchId: "tf-test-batch_75125", + * batchId: "tf-test-batch_88722", * location: "us-central1", * labels: { * batch_test: "terraform", @@ -152,7 +152,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const exampleBatchSparsql = new gcp.dataproc.Batch("example_batch_sparsql", { - * batchId: "tf-test-batch_88722", + * batchId: "tf-test-batch_39249", * location: "us-central1", * runtimeConfig: { * properties: { @@ -181,7 +181,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const exampleBatchPyspark = new gcp.dataproc.Batch("example_batch_pyspark", { - * batchId: "tf-test-batch_39249", + * batchId: "tf-test-batch_74391", * location: "us-central1", * runtimeConfig: { * properties: { @@ -215,7 +215,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const exampleBatchSparkr = new gcp.dataproc.Batch("example_batch_sparkr", { - * batchId: "tf-test-batch_74391", + * batchId: "tf-test-batch_16511", * location: "us-central1", * labels: { * batch_test: "terraform", @@ -246,7 +246,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const exampleBatchAutotuning = new gcp.dataproc.Batch("example_batch_autotuning", { - * batchId: "tf-test-batch_16511", + * batchId: "tf-test-batch_8493", * location: "us-central1", * labels: { * batch_test: "terraform", diff --git a/sdk/nodejs/discoveryengine/dataStore.ts b/sdk/nodejs/discoveryengine/dataStore.ts index d8faa13e82..9d648100c0 100644 --- a/sdk/nodejs/discoveryengine/dataStore.ts +++ b/sdk/nodejs/discoveryengine/dataStore.ts @@ -63,6 +63,27 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Discoveryengine Datastore Advanced Site Search Config + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const advancedSiteSearchConfig = new gcp.discoveryengine.DataStore("advanced_site_search_config", { + * location: "global", + * dataStoreId: "data-store-id", + * displayName: "tf-test-advanced-site-search-config-datastore", + * industryVertical: "GENERIC", + * contentConfig: "PUBLIC_WEBSITE", + * solutionTypes: ["SOLUTION_TYPE_CHAT"], + * createAdvancedSiteSearch: true, + * skipDefaultSchemaCreation: false, + * advancedSiteSearchConfig: { + * disableInitialIndex: true, + * disableAutomaticRefresh: true, + * }, + * }); + * ``` * * ## Import * @@ -116,6 +137,11 @@ export class DataStore extends pulumi.CustomResource { return obj['__pulumiType'] === DataStore.__pulumiType; } + /** + * Configuration data for advance site search. + * Structure is documented below. + */ + public readonly advancedSiteSearchConfig!: pulumi.Output; /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -203,6 +229,7 @@ export class DataStore extends pulumi.CustomResource { opts = opts || {}; if (opts.id) { const state = argsOrState as DataStoreState | undefined; + resourceInputs["advancedSiteSearchConfig"] = state ? state.advancedSiteSearchConfig : undefined; resourceInputs["contentConfig"] = state ? state.contentConfig : undefined; resourceInputs["createAdvancedSiteSearch"] = state ? state.createAdvancedSiteSearch : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; @@ -233,6 +260,7 @@ export class DataStore extends pulumi.CustomResource { if ((!args || args.location === undefined) && !opts.urn) { throw new Error("Missing required property 'location'"); } + resourceInputs["advancedSiteSearchConfig"] = args ? args.advancedSiteSearchConfig : undefined; resourceInputs["contentConfig"] = args ? args.contentConfig : undefined; resourceInputs["createAdvancedSiteSearch"] = args ? args.createAdvancedSiteSearch : undefined; resourceInputs["dataStoreId"] = args ? args.dataStoreId : undefined; @@ -256,6 +284,11 @@ export class DataStore extends pulumi.CustomResource { * Input properties used for looking up and filtering DataStore resources. */ export interface DataStoreState { + /** + * Configuration data for advance site search. + * Structure is documented below. + */ + advancedSiteSearchConfig?: pulumi.Input; /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. @@ -335,6 +368,11 @@ export interface DataStoreState { * The set of arguments for constructing a DataStore resource. */ export interface DataStoreArgs { + /** + * Configuration data for advance site search. + * Structure is documented below. + */ + advancedSiteSearchConfig?: pulumi.Input; /** * The content config of the data store. * Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. diff --git a/sdk/nodejs/edgenetwork/index.ts b/sdk/nodejs/edgenetwork/index.ts index 8a7f61a142..103a1e8364 100644 --- a/sdk/nodejs/edgenetwork/index.ts +++ b/sdk/nodejs/edgenetwork/index.ts @@ -5,6 +5,11 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; // Export members: +export { InterconnectAttachmentArgs, InterconnectAttachmentState } from "./interconnectAttachment"; +export type InterconnectAttachment = import("./interconnectAttachment").InterconnectAttachment; +export const InterconnectAttachment: typeof import("./interconnectAttachment").InterconnectAttachment = null as any; +utilities.lazyLoad(exports, ["InterconnectAttachment"], () => require("./interconnectAttachment")); + export { NetworkArgs, NetworkState } from "./network"; export type Network = import("./network").Network; export const Network: typeof import("./network").Network = null as any; @@ -20,6 +25,8 @@ const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { switch (type) { + case "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment": + return new InterconnectAttachment(name, undefined, { urn }) case "gcp:edgenetwork/network:Network": return new Network(name, undefined, { urn }) case "gcp:edgenetwork/subnet:Subnet": @@ -29,5 +36,6 @@ const _module = { } }, }; +pulumi.runtime.registerResourceModule("gcp", "edgenetwork/interconnectAttachment", _module) pulumi.runtime.registerResourceModule("gcp", "edgenetwork/network", _module) pulumi.runtime.registerResourceModule("gcp", "edgenetwork/subnet", _module) diff --git a/sdk/nodejs/edgenetwork/interconnectAttachment.ts b/sdk/nodejs/edgenetwork/interconnectAttachment.ts new file mode 100644 index 0000000000..231804a391 --- /dev/null +++ b/sdk/nodejs/edgenetwork/interconnectAttachment.ts @@ -0,0 +1,388 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. + * + * To get more information about InterconnectAttachment, see: + * + * * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) + * * How-to Guides + * * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) + * + * ## Example Usage + * + * ### Edgenetwork Interconnect Attachment + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const exampleNetwork = new gcp.edgenetwork.Network("example_network", { + * networkId: "example-network", + * location: "us-west1", + * zone: "", + * description: "Example network.", + * mtu: 9000, + * }); + * const exampleInterconnectAttachment = new gcp.edgenetwork.InterconnectAttachment("example_interconnect_attachment", { + * interconnectAttachmentId: "example-interconnect-attachment", + * location: "us-west1", + * zone: "", + * description: "Example interconnect attachment.", + * network: exampleNetwork.id, + * interconnect: "11111111-2222-3333-4444-555555555555", + * vlanId: 55, + * mtu: 9000, + * labels: { + * environment: "dev", + * }, + * }); + * ``` + * + * ## Import + * + * InterconnectAttachment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` + * + * * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` + * + * * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` + * + * * `{{location}}/{{interconnect_attachment_id}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} + * ``` + */ +export class InterconnectAttachment extends pulumi.CustomResource { + /** + * Get an existing InterconnectAttachment resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: InterconnectAttachmentState, opts?: pulumi.CustomResourceOptions): InterconnectAttachment { + return new InterconnectAttachment(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:edgenetwork/interconnectAttachment:InterconnectAttachment'; + + /** + * Returns true if the given object is an instance of InterconnectAttachment. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is InterconnectAttachment { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === InterconnectAttachment.__pulumiType; + } + + /** + * The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * A free-text description of the resource. Max length 1024 characters. + */ + public readonly description!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + */ + public readonly interconnect!: pulumi.Output; + /** + * A unique ID that identifies this interconnect attachment. + * + * + * - - - + */ + public readonly interconnectAttachmentId!: pulumi.Output; + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + */ + public readonly location!: pulumi.Output; + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + */ + public readonly mtu!: pulumi.Output; + /** + * The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + */ + public readonly network!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + /** + * VLAN ID provided by user. Must be site-wise unique. + */ + public readonly vlanId!: pulumi.Output; + /** + * The name of the target Distributed Cloud Edge zone. + */ + public readonly zone!: pulumi.Output; + + /** + * Create a InterconnectAttachment resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: InterconnectAttachmentArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: InterconnectAttachmentArgs | InterconnectAttachmentState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as InterconnectAttachmentState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["description"] = state ? state.description : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["interconnect"] = state ? state.interconnect : undefined; + resourceInputs["interconnectAttachmentId"] = state ? state.interconnectAttachmentId : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["mtu"] = state ? state.mtu : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["network"] = state ? state.network : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + resourceInputs["vlanId"] = state ? state.vlanId : undefined; + resourceInputs["zone"] = state ? state.zone : undefined; + } else { + const args = argsOrState as InterconnectAttachmentArgs | undefined; + if ((!args || args.interconnect === undefined) && !opts.urn) { + throw new Error("Missing required property 'interconnect'"); + } + if ((!args || args.interconnectAttachmentId === undefined) && !opts.urn) { + throw new Error("Missing required property 'interconnectAttachmentId'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.network === undefined) && !opts.urn) { + throw new Error("Missing required property 'network'"); + } + if ((!args || args.vlanId === undefined) && !opts.urn) { + throw new Error("Missing required property 'vlanId'"); + } + if ((!args || args.zone === undefined) && !opts.urn) { + throw new Error("Missing required property 'zone'"); + } + resourceInputs["description"] = args ? args.description : undefined; + resourceInputs["interconnect"] = args ? args.interconnect : undefined; + resourceInputs["interconnectAttachmentId"] = args ? args.interconnectAttachmentId : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["mtu"] = args ? args.mtu : undefined; + resourceInputs["network"] = args ? args.network : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["vlanId"] = args ? args.vlanId : undefined; + resourceInputs["zone"] = args ? args.zone : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(InterconnectAttachment.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering InterconnectAttachment resources. + */ +export interface InterconnectAttachmentState { + /** + * The time when the resource was created. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + */ + createTime?: pulumi.Input; + /** + * A free-text description of the resource. Max length 1024 characters. + */ + description?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + */ + interconnect?: pulumi.Input; + /** + * A unique ID that identifies this interconnect attachment. + * + * + * - - - + */ + interconnectAttachmentId?: pulumi.Input; + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + */ + location?: pulumi.Input; + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + */ + mtu?: pulumi.Input; + /** + * The canonical name of this resource, with format + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + */ + name?: pulumi.Input; + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + */ + network?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The time when the resource was last updated. + * A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + * fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + */ + updateTime?: pulumi.Input; + /** + * VLAN ID provided by user. Must be site-wise unique. + */ + vlanId?: pulumi.Input; + /** + * The name of the target Distributed Cloud Edge zone. + */ + zone?: pulumi.Input; +} + +/** + * The set of arguments for constructing a InterconnectAttachment resource. + */ +export interface InterconnectAttachmentArgs { + /** + * A free-text description of the resource. Max length 1024 characters. + */ + description?: pulumi.Input; + /** + * The ID of the underlying interconnect that this attachment's traffic will traverse through. + */ + interconnect: pulumi.Input; + /** + * A unique ID that identifies this interconnect attachment. + * + * + * - - - + */ + interconnectAttachmentId: pulumi.Input; + /** + * Labels associated with this resource. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + */ + location: pulumi.Input; + /** + * IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + */ + mtu?: pulumi.Input; + /** + * The ID of the network to which this interconnect attachment belongs. + * Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + */ + network: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * VLAN ID provided by user. Must be site-wise unique. + */ + vlanId: pulumi.Input; + /** + * The name of the target Distributed Cloud Edge zone. + */ + zone: pulumi.Input; +} diff --git a/sdk/nodejs/firestore/field.ts b/sdk/nodejs/firestore/field.ts index 946f51da04..d3dbbbfab6 100644 --- a/sdk/nodejs/firestore/field.ts +++ b/sdk/nodejs/firestore/field.ts @@ -41,7 +41,7 @@ import * as utilities from "../utilities"; * const basic = new gcp.firestore.Field("basic", { * project: "my-project-name", * database: database.name, - * collection: "chatrooms__8493", + * collection: "chatrooms__9106", * field: "basic", * indexConfig: { * indexes: [ @@ -96,7 +96,7 @@ import * as utilities from "../utilities"; * const matchOverride = new gcp.firestore.Field("match_override", { * project: "my-project-name", * database: database.name, - * collection: "chatrooms__9106", + * collection: "chatrooms__27169", * field: "field_with_same_configuration_as_ancestor", * indexConfig: { * indexes: [ diff --git a/sdk/nodejs/gemini/codeRepositoryIndex.ts b/sdk/nodejs/gemini/codeRepositoryIndex.ts index 76074dd529..b993de07c8 100644 --- a/sdk/nodejs/gemini/codeRepositoryIndex.ts +++ b/sdk/nodejs/gemini/codeRepositoryIndex.ts @@ -87,6 +87,10 @@ export class CodeRepositoryIndex extends pulumi.CustomResource { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + */ + public readonly forceDestroy!: pulumi.Output; /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -147,6 +151,7 @@ export class CodeRepositoryIndex extends pulumi.CustomResource { resourceInputs["codeRepositoryIndexId"] = state ? state.codeRepositoryIndexId : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["forceDestroy"] = state ? state.forceDestroy : undefined; resourceInputs["kmsKey"] = state ? state.kmsKey : undefined; resourceInputs["labels"] = state ? state.labels : undefined; resourceInputs["location"] = state ? state.location : undefined; @@ -164,6 +169,7 @@ export class CodeRepositoryIndex extends pulumi.CustomResource { throw new Error("Missing required property 'location'"); } resourceInputs["codeRepositoryIndexId"] = args ? args.codeRepositoryIndexId : undefined; + resourceInputs["forceDestroy"] = args ? args.forceDestroy : undefined; resourceInputs["kmsKey"] = args ? args.kmsKey : undefined; resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["location"] = args ? args.location : undefined; @@ -201,6 +207,10 @@ export interface CodeRepositoryIndexState { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + */ + forceDestroy?: pulumi.Input; /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. @@ -257,6 +267,10 @@ export interface CodeRepositoryIndexArgs { * - - - */ codeRepositoryIndexId: pulumi.Input; + /** + * If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + */ + forceDestroy?: pulumi.Input; /** * Optional. Immutable. Customer-managed encryption key name, in the format * projects/*/locations/*/keyRings/*/cryptoKeys/*. diff --git a/sdk/nodejs/gkehub/membershipBinding.ts b/sdk/nodejs/gkehub/membershipBinding.ts index 27d5d73693..d88586fbdf 100644 --- a/sdk/nodejs/gkehub/membershipBinding.ts +++ b/sdk/nodejs/gkehub/membershipBinding.ts @@ -32,7 +32,7 @@ import * as utilities from "../utilities"; * subnetwork: "default", * }); * const membership = new gcp.gkehub.Membership("membership", { - * membershipId: "tf-test-membership_27169", + * membershipId: "tf-test-membership_75223", * endpoint: { * gkeCluster: { * resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`, @@ -41,9 +41,9 @@ import * as utilities from "../utilities"; * }, { * dependsOn: [primary], * }); - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_75223"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_41819"}); * const membershipBinding = new gcp.gkehub.MembershipBinding("membership_binding", { - * membershipBindingId: "tf-test-membership-binding_41819", + * membershipBindingId: "tf-test-membership-binding_75092", * scope: scope.name, * membershipId: membership.membershipId, * location: "global", diff --git a/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts b/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts index ccdce6946d..68de66305c 100644 --- a/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts +++ b/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts @@ -24,7 +24,7 @@ import * as utilities from "../utilities"; * subnetwork: "default", * }); * const membership = new gcp.gkehub.Membership("membership", { - * membershipId: "tf-test-membership_75092", + * membershipId: "tf-test-membership_2605", * endpoint: { * gkeCluster: { * resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`, @@ -35,7 +35,7 @@ import * as utilities from "../utilities"; * }); * const project = gcp.organizations.getProject({}); * const membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", { - * membershipRbacRoleBindingId: "tf-test-membership-rbac-role-binding_2605", + * membershipRbacRoleBindingId: "tf-test-membership-rbac-role-binding_34535", * membershipId: membership.membershipId, * user: project.then(project => `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`), * role: { diff --git a/sdk/nodejs/gkehub/namespace.ts b/sdk/nodejs/gkehub/namespace.ts index 7a8fbffe1c..a03d325561 100644 --- a/sdk/nodejs/gkehub/namespace.ts +++ b/sdk/nodejs/gkehub/namespace.ts @@ -23,9 +23,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_34535"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_22375"}); * const namespace = new gcp.gkehub.Namespace("namespace", { - * scopeNamespaceId: "tf-test-namespace_22375", + * scopeNamespaceId: "tf-test-namespace_29439", * scopeId: scope.scopeId, * scope: scope.name, * namespaceLabels: { diff --git a/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts b/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts index a180fdaf12..6973f95bf8 100644 --- a/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts +++ b/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts @@ -23,9 +23,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_29439"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_87786"}); * const scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", { - * scopeRbacRoleBindingId: "tf-test-scope-rbac-role-binding_87786", + * scopeRbacRoleBindingId: "tf-test-scope-rbac-role-binding_2067", * scopeId: scope.scopeId, * user: "test-email@gmail.com", * role: { diff --git a/sdk/nodejs/iap/tunnelDestGroup.ts b/sdk/nodejs/iap/tunnelDestGroup.ts index d7190bec08..f436df3a4f 100644 --- a/sdk/nodejs/iap/tunnelDestGroup.ts +++ b/sdk/nodejs/iap/tunnelDestGroup.ts @@ -23,7 +23,7 @@ import * as utilities from "../utilities"; * * const destGroup = new gcp.iap.TunnelDestGroup("dest_group", { * region: "us-central1", - * groupName: "testgroup_2067", + * groupName: "testgroup_40785", * cidrs: [ * "10.1.0.0/16", * "192.168.10.0/24", diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index d6e2e9df77..d6ec9b32be 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -51,6 +51,7 @@ import * as cloudrun from "./cloudrun"; import * as cloudrunv2 from "./cloudrunv2"; import * as cloudscheduler from "./cloudscheduler"; import * as cloudtasks from "./cloudtasks"; +import * as colab from "./colab"; import * as composer from "./composer"; import * as compute from "./compute"; import * as config from "./config"; @@ -110,6 +111,7 @@ import * as orgpolicy from "./orgpolicy"; import * as osconfig from "./osconfig"; import * as oslogin from "./oslogin"; import * as parallelstore from "./parallelstore"; +import * as parametermanager from "./parametermanager"; import * as privilegedaccessmanager from "./privilegedaccessmanager"; import * as projects from "./projects"; import * as pubsub from "./pubsub"; @@ -180,6 +182,7 @@ export { cloudrunv2, cloudscheduler, cloudtasks, + colab, composer, compute, config, @@ -239,6 +242,7 @@ export { osconfig, oslogin, parallelstore, + parametermanager, privilegedaccessmanager, projects, pubsub, diff --git a/sdk/nodejs/integrationconnectors/managedZone.ts b/sdk/nodejs/integrationconnectors/managedZone.ts index e1eb4f42d9..2c5cf4c46b 100644 --- a/sdk/nodejs/integrationconnectors/managedZone.ts +++ b/sdk/nodejs/integrationconnectors/managedZone.ts @@ -22,8 +22,8 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const targetProject = new gcp.organizations.Project("target_project", { - * projectId: "tf-test_40785", - * name: "tf-test_79169", + * projectId: "tf-test_79169", + * name: "tf-test_56529", * orgId: "123456789", * billingAccount: "000000-0000000-0000000-000000", * deletionPolicy: "DELETE", @@ -50,8 +50,8 @@ import * as utilities from "../utilities"; * dependsOn: [compute], * }); * const zone = new gcp.dns.ManagedZone("zone", { - * name: "tf-test-dns_56529", - * dnsName: "private_75413.example.com.", + * name: "tf-test-dns_75413", + * dnsName: "private_55138.example.com.", * visibility: "private", * privateVisibilityConfig: { * networks: [{ diff --git a/sdk/nodejs/networkconnectivity/spoke.ts b/sdk/nodejs/networkconnectivity/spoke.ts index 03547f4afe..20ba8b7551 100644 --- a/sdk/nodejs/networkconnectivity/spoke.ts +++ b/sdk/nodejs/networkconnectivity/spoke.ts @@ -106,17 +106,17 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const network = new gcp.compute.Network("network", { - * name: "tf-test-network_55138", + * name: "tf-test-network_37559", * autoCreateSubnetworks: false, * }); * const subnetwork = new gcp.compute.Subnetwork("subnetwork", { - * name: "tf-test-subnet_37559", + * name: "tf-test-subnet_91980", * ipCidrRange: "10.0.0.0/28", * region: "us-central1", * network: network.selfLink, * }); * const instance = new gcp.compute.Instance("instance", { - * name: "tf-test-instance_91980", + * name: "tf-test-instance_37118", * machineType: "e2-medium", * canIpForward: true, * zone: "us-central1-a", @@ -134,14 +134,14 @@ import * as utilities from "../utilities"; * }], * }); * const basicHub = new gcp.networkconnectivity.Hub("basic_hub", { - * name: "tf-test-hub_37118", + * name: "tf-test-hub_80332", * description: "A sample hub", * labels: { * "label-two": "value-one", * }, * }); * const primary = new gcp.networkconnectivity.Spoke("primary", { - * name: "tf-test-name_80332", + * name: "tf-test-name_13293", * location: "us-central1", * description: "A sample spoke with a linked routher appliance instance", * labels: { @@ -401,8 +401,8 @@ import * as utilities from "../utilities"; * hub: starHub.id, * autoAccept: { * autoAcceptProjects: [ - * "foo_13293", - * "bar_40289", + * "foo_40289", + * "bar_33395", * ], * }, * }); diff --git a/sdk/nodejs/networksecurity/authzPolicy.ts b/sdk/nodejs/networksecurity/authzPolicy.ts index 97f90b8f39..4110f74da6 100644 --- a/sdk/nodejs/networksecurity/authzPolicy.ts +++ b/sdk/nodejs/networksecurity/authzPolicy.ts @@ -15,120 +15,6 @@ import * as utilities from "../utilities"; * * ## Example Usage * - * ### Network Services Authz Policy Advanced - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const _default = new gcp.compute.Network("default", { - * name: "lb-network", - * project: "my-project-name", - * autoCreateSubnetworks: false, - * }); - * const defaultSubnetwork = new gcp.compute.Subnetwork("default", { - * name: "backend-subnet", - * project: "my-project-name", - * region: "us-west1", - * ipCidrRange: "10.1.2.0/24", - * network: _default.id, - * }); - * const proxyOnly = new gcp.compute.Subnetwork("proxy_only", { - * name: "proxy-only-subnet", - * project: "my-project-name", - * region: "us-west1", - * ipCidrRange: "10.129.0.0/23", - * purpose: "REGIONAL_MANAGED_PROXY", - * role: "ACTIVE", - * network: _default.id, - * }); - * const defaultAddress = new gcp.compute.Address("default", { - * name: "l7-ilb-ip-address", - * project: "my-project-name", - * region: "us-west1", - * subnetwork: defaultSubnetwork.id, - * addressType: "INTERNAL", - * purpose: "GCE_ENDPOINT", - * }); - * const defaultRegionHealthCheck = new gcp.compute.RegionHealthCheck("default", { - * name: "l7-ilb-basic-check", - * project: "my-project-name", - * region: "us-west1", - * httpHealthCheck: { - * portSpecification: "USE_SERVING_PORT", - * }, - * }); - * const urlMap = new gcp.compute.RegionBackendService("url_map", { - * name: "l7-ilb-backend-service", - * project: "my-project-name", - * region: "us-west1", - * loadBalancingScheme: "INTERNAL_MANAGED", - * healthChecks: defaultRegionHealthCheck.id, - * }); - * const defaultRegionUrlMap = new gcp.compute.RegionUrlMap("default", { - * name: "l7-ilb-map", - * project: "my-project-name", - * region: "us-west1", - * defaultService: urlMap.id, - * }); - * const defaultRegionTargetHttpProxy = new gcp.compute.RegionTargetHttpProxy("default", { - * name: "l7-ilb-proxy", - * project: "my-project-name", - * region: "us-west1", - * urlMap: defaultRegionUrlMap.id, - * }); - * const defaultForwardingRule = new gcp.compute.ForwardingRule("default", { - * name: "l7-ilb-forwarding-rule", - * project: "my-project-name", - * region: "us-west1", - * loadBalancingScheme: "INTERNAL_MANAGED", - * network: _default.id, - * subnetwork: defaultSubnetwork.id, - * ipProtocol: "TCP", - * portRange: "80", - * target: defaultRegionTargetHttpProxy.id, - * ipAddress: defaultAddress.id, - * }, { - * dependsOn: [proxyOnly], - * }); - * const authzExtension = new gcp.compute.RegionBackendService("authz_extension", { - * name: "authz-service", - * project: "my-project-name", - * region: "us-west1", - * protocol: "HTTP2", - * loadBalancingScheme: "INTERNAL_MANAGED", - * portName: "grpc", - * }); - * const defaultAuthzExtension = new gcp.networkservices.AuthzExtension("default", { - * name: "my-authz-ext", - * project: "my-project-name", - * location: "us-west1", - * description: "my description", - * loadBalancingScheme: "INTERNAL_MANAGED", - * authority: "ext11.com", - * service: authzExtension.selfLink, - * timeout: "0.1s", - * failOpen: false, - * forwardHeaders: ["Authorization"], - * }); - * const defaultAuthzPolicy = new gcp.networksecurity.AuthzPolicy("default", { - * name: "my-authz-policy", - * project: "my-project-name", - * location: "us-west1", - * description: "my description", - * target: { - * loadBalancingScheme: "INTERNAL_MANAGED", - * resources: [defaultForwardingRule.selfLink], - * }, - * action: "CUSTOM", - * customProvider: { - * authzExtension: { - * resources: [defaultAuthzExtension.id], - * }, - * }, - * }); - * ``` - * * ## Import * * AuthzPolicy can be imported using any of these accepted formats: diff --git a/sdk/nodejs/orgpolicy/policy.ts b/sdk/nodejs/orgpolicy/policy.ts index d947ee6fa1..bb07d75439 100644 --- a/sdk/nodejs/orgpolicy/policy.ts +++ b/sdk/nodejs/orgpolicy/policy.ts @@ -119,7 +119,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const constraint = new gcp.orgpolicy.CustomConstraint("constraint", { - * name: "custom.disableGkeAutoUpgrade_76044", + * name: "custom.disableGkeAutoUpgrade_69391", * parent: "organizations/123456789", * displayName: "Disable GKE auto upgrade", * description: "Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/nodejs/parametermanager/getRegionalParameter.ts b/sdk/nodejs/parametermanager/getRegionalParameter.ts new file mode 100644 index 0000000000..adfae5ca24 --- /dev/null +++ b/sdk/nodejs/parametermanager/getRegionalParameter.ts @@ -0,0 +1,107 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regParameterDatasource = gcp.parametermanager.getRegionalParameter({ + * parameterId: "foobar", + * location: "us-central1", + * }); + * ``` + */ +export function getRegionalParameter(args: GetRegionalParameterArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:parametermanager/getRegionalParameter:getRegionalParameter", { + "location": args.location, + "parameterId": args.parameterId, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getRegionalParameter. + */ +export interface GetRegionalParameterArgs { + /** + * The location of the regional parameter. eg us-central1 + */ + location: string; + /** + * The name of the regional parameter. + */ + parameterId: string; + /** + * The ID of the project in which the resource belongs. + */ + project?: string; +} + +/** + * A collection of values returned by getRegionalParameter. + */ +export interface GetRegionalParameterResult { + readonly createTime: string; + readonly effectiveLabels: {[key: string]: string}; + readonly format: string; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly labels: {[key: string]: string}; + readonly location: string; + readonly name: string; + readonly parameterId: string; + readonly policyMembers: outputs.parametermanager.GetRegionalParameterPolicyMember[]; + readonly project?: string; + readonly pulumiLabels: {[key: string]: string}; + readonly updateTime: string; +} +/** + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regParameterDatasource = gcp.parametermanager.getRegionalParameter({ + * parameterId: "foobar", + * location: "us-central1", + * }); + * ``` + */ +export function getRegionalParameterOutput(args: GetRegionalParameterOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("gcp:parametermanager/getRegionalParameter:getRegionalParameter", { + "location": args.location, + "parameterId": args.parameterId, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getRegionalParameter. + */ +export interface GetRegionalParameterOutputArgs { + /** + * The location of the regional parameter. eg us-central1 + */ + location: pulumi.Input; + /** + * The name of the regional parameter. + */ + parameterId: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/parametermanager/index.ts b/sdk/nodejs/parametermanager/index.ts new file mode 100644 index 0000000000..66f2c2af4e --- /dev/null +++ b/sdk/nodejs/parametermanager/index.ts @@ -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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { GetRegionalParameterArgs, GetRegionalParameterResult, GetRegionalParameterOutputArgs } from "./getRegionalParameter"; +export const getRegionalParameter: typeof import("./getRegionalParameter").getRegionalParameter = null as any; +export const getRegionalParameterOutput: typeof import("./getRegionalParameter").getRegionalParameterOutput = null as any; +utilities.lazyLoad(exports, ["getRegionalParameter","getRegionalParameterOutput"], () => require("./getRegionalParameter")); + +export { ParameterArgs, ParameterState } from "./parameter"; +export type Parameter = import("./parameter").Parameter; +export const Parameter: typeof import("./parameter").Parameter = null as any; +utilities.lazyLoad(exports, ["Parameter"], () => require("./parameter")); + +export { RegionalParameterArgs, RegionalParameterState } from "./regionalParameter"; +export type RegionalParameter = import("./regionalParameter").RegionalParameter; +export const RegionalParameter: typeof import("./regionalParameter").RegionalParameter = null as any; +utilities.lazyLoad(exports, ["RegionalParameter"], () => require("./regionalParameter")); + +export { RegionalParameterVersionArgs, RegionalParameterVersionState } from "./regionalParameterVersion"; +export type RegionalParameterVersion = import("./regionalParameterVersion").RegionalParameterVersion; +export const RegionalParameterVersion: typeof import("./regionalParameterVersion").RegionalParameterVersion = null as any; +utilities.lazyLoad(exports, ["RegionalParameterVersion"], () => require("./regionalParameterVersion")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:parametermanager/parameter:Parameter": + return new Parameter(name, undefined, { urn }) + case "gcp:parametermanager/regionalParameter:RegionalParameter": + return new RegionalParameter(name, undefined, { urn }) + case "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion": + return new RegionalParameterVersion(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "parametermanager/parameter", _module) +pulumi.runtime.registerResourceModule("gcp", "parametermanager/regionalParameter", _module) +pulumi.runtime.registerResourceModule("gcp", "parametermanager/regionalParameterVersion", _module) diff --git a/sdk/nodejs/parametermanager/parameter.ts b/sdk/nodejs/parametermanager/parameter.ts new file mode 100644 index 0000000000..e11e8a542a --- /dev/null +++ b/sdk/nodejs/parametermanager/parameter.ts @@ -0,0 +1,308 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Parameter Config Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const parameter_basic = new gcp.parametermanager.Parameter("parameter-basic", {parameterId: "parameter"}); + * ``` + * ### Parameter With Format + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const parameter_with_format = new gcp.parametermanager.Parameter("parameter-with-format", { + * parameterId: "parameter", + * format: "JSON", + * }); + * ``` + * ### Parameter With Labels + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const parameter_with_labels = new gcp.parametermanager.Parameter("parameter-with-labels", { + * parameterId: "parameter", + * labels: { + * key1: "val1", + * key2: "val2", + * key3: "val3", + * key4: "val4", + * key5: "val5", + * }, + * }); + * ``` + * + * ## Import + * + * Parameter can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + * + * * `{{project}}/{{parameter_id}}` + * + * * `{{parameter_id}}` + * + * When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} + * ``` + */ +export class Parameter extends pulumi.CustomResource { + /** + * Get an existing Parameter resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ParameterState, opts?: pulumi.CustomResourceOptions): Parameter { + return new Parameter(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:parametermanager/parameter:Parameter'; + + /** + * Returns true if the given object is an instance of Parameter. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Parameter { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Parameter.__pulumiType; + } + + /** + * The time at which the Parameter was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + public readonly format!: pulumi.Output; + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * This must be unique within the project. + * + * + * - - - + */ + public readonly parameterId!: pulumi.Output; + /** + * Policy member strings of a Google Cloud resource. + * Structure is documented below. + */ + public /*out*/ readonly policyMembers!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The time at which the Parameter was updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a Parameter resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ParameterArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ParameterArgs | ParameterState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ParameterState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["format"] = state ? state.format : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parameterId"] = state ? state.parameterId : undefined; + resourceInputs["policyMembers"] = state ? state.policyMembers : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as ParameterArgs | undefined; + if ((!args || args.parameterId === undefined) && !opts.urn) { + throw new Error("Missing required property 'parameterId'"); + } + resourceInputs["format"] = args ? args.format : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["parameterId"] = args ? args.parameterId : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["policyMembers"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Parameter.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Parameter resources. + */ +export interface ParameterState { + /** + * The time at which the Parameter was created. + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + format?: pulumi.Input; + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The resource name of the Parameter. Format: + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + */ + name?: pulumi.Input; + /** + * This must be unique within the project. + * + * + * - - - + */ + parameterId?: pulumi.Input; + /** + * Policy member strings of a Google Cloud resource. + * Structure is documented below. + */ + policyMembers?: pulumi.Input[]>; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The time at which the Parameter was updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Parameter resource. + */ +export interface ParameterArgs { + /** + * The format type of the parameter resource. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + format?: pulumi.Input; + /** + * The labels assigned to this Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * This must be unique within the project. + * + * + * - - - + */ + parameterId: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/parametermanager/regionalParameter.ts b/sdk/nodejs/parametermanager/regionalParameter.ts new file mode 100644 index 0000000000..1e98e5af7e --- /dev/null +++ b/sdk/nodejs/parametermanager/regionalParameter.ts @@ -0,0 +1,330 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Regional Parameter Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regional_parameter_basic = new gcp.parametermanager.RegionalParameter("regional-parameter-basic", { + * parameterId: "regional_parameter", + * location: "us-central1", + * }); + * ``` + * ### Regional Parameter With Format + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regional_parameter_with_format = new gcp.parametermanager.RegionalParameter("regional-parameter-with-format", { + * parameterId: "regional_parameter", + * location: "us-central1", + * format: "JSON", + * }); + * ``` + * ### Regional Parameter With Labels + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regional_parameter_with_labels = new gcp.parametermanager.RegionalParameter("regional-parameter-with-labels", { + * parameterId: "regional_parameter", + * location: "us-central1", + * labels: { + * key1: "val1", + * key2: "val2", + * key3: "val3", + * key4: "val4", + * key5: "val5", + * }, + * }); + * ``` + * + * ## Import + * + * RegionalParameter can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + * + * * `{{project}}/{{location}}/{{parameter_id}}` + * + * * `{{location}}/{{parameter_id}}` + * + * When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} + * ``` + */ +export class RegionalParameter extends pulumi.CustomResource { + /** + * Get an existing RegionalParameter resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RegionalParameterState, opts?: pulumi.CustomResourceOptions): RegionalParameter { + return new RegionalParameter(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:parametermanager/regionalParameter:RegionalParameter'; + + /** + * Returns true if the given object is an instance of RegionalParameter. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RegionalParameter { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RegionalParameter.__pulumiType; + } + + /** + * The time at which the regional Parameter was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + public readonly format!: pulumi.Output; + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The location of the regional parameter. eg us-central1 + */ + public readonly location!: pulumi.Output; + /** + * The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * This must be unique within the project. + * + * + * - - - + */ + public readonly parameterId!: pulumi.Output; + /** + * An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + */ + public /*out*/ readonly policyMembers!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The time at which the regional Parameter was updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a RegionalParameter resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RegionalParameterArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RegionalParameterArgs | RegionalParameterState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RegionalParameterState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["format"] = state ? state.format : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parameterId"] = state ? state.parameterId : undefined; + resourceInputs["policyMembers"] = state ? state.policyMembers : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as RegionalParameterArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.parameterId === undefined) && !opts.urn) { + throw new Error("Missing required property 'parameterId'"); + } + resourceInputs["format"] = args ? args.format : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["parameterId"] = args ? args.parameterId : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["policyMembers"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(RegionalParameter.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RegionalParameter resources. + */ +export interface RegionalParameterState { + /** + * The time at which the regional Parameter was created. + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + format?: pulumi.Input; + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the regional parameter. eg us-central1 + */ + location?: pulumi.Input; + /** + * The resource name of the regional Parameter. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + */ + name?: pulumi.Input; + /** + * This must be unique within the project. + * + * + * - - - + */ + parameterId?: pulumi.Input; + /** + * An object containing a unique resource identity tied to the regional parameter. + * Structure is documented below. + */ + policyMembers?: pulumi.Input[]>; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The time at which the regional Parameter was updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RegionalParameter resource. + */ +export interface RegionalParameterArgs { + /** + * The format type of the regional parameter. + * Default value is `UNFORMATTED`. + * Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + */ + format?: pulumi.Input; + /** + * The labels assigned to this regional Parameter. + * Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62} + * Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + * and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63} + * No more than 64 labels can be assigned to a given resource. + * An object containing a list of "key": value pairs. Example: + * { "name": "wrench", "mass": "1.3kg", "count": "3" }. + * + * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + * Please refer to the field `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the regional parameter. eg us-central1 + */ + location: pulumi.Input; + /** + * This must be unique within the project. + * + * + * - - - + */ + parameterId: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/parametermanager/regionalParameterVersion.ts b/sdk/nodejs/parametermanager/regionalParameterVersion.ts new file mode 100644 index 0000000000..795ac7e703 --- /dev/null +++ b/sdk/nodejs/parametermanager/regionalParameterVersion.ts @@ -0,0 +1,260 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Regional Parameter Version Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const regional_parameter_basic = new gcp.parametermanager.RegionalParameter("regional-parameter-basic", { + * parameterId: "regional_parameter", + * location: "us-central1", + * }); + * const regional_parameter_version_basic = new gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-basic", { + * parameter: regional_parameter_basic.id, + * parameterVersionId: "regional_parameter_version", + * parameterData: "regional-parameter-version-data", + * }); + * ``` + * ### Regional Parameter Version With Json Format + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * import * as std from "@pulumi/std"; + * + * const regional_parameter_basic = new gcp.parametermanager.RegionalParameter("regional-parameter-basic", { + * parameterId: "regional_parameter", + * format: "JSON", + * location: "us-central1", + * }); + * const regional_parameter_version_with_json_format = new gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-json-format", { + * parameter: regional_parameter_basic.id, + * parameterVersionId: "regional_parameter_version", + * parameterData: std.file({ + * input: "parameter_data_json_format.yaml", + * }).then(invoke => invoke.result), + * }); + * ``` + * ### Regional Parameter Version With Yaml Format + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * import * as std from "@pulumi/std"; + * + * const regional_parameter_basic = new gcp.parametermanager.RegionalParameter("regional-parameter-basic", { + * parameterId: "regional_parameter", + * format: "YAML", + * location: "us-central1", + * }); + * const regional_parameter_version_with_yaml_format = new gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-yaml-format", { + * parameter: regional_parameter_basic.id, + * parameterVersionId: "regional_parameter_version", + * parameterData: std.file({ + * input: "parameter_data_yaml_format.yaml", + * }).then(invoke => invoke.result), + * }); + * ``` + * + * ## Import + * + * RegionalParameterVersion can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + * + * When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} + * ``` + */ +export class RegionalParameterVersion extends pulumi.CustomResource { + /** + * Get an existing RegionalParameterVersion resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RegionalParameterVersionState, opts?: pulumi.CustomResourceOptions): RegionalParameterVersion { + return new RegionalParameterVersion(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion'; + + /** + * Returns true if the given object is an instance of RegionalParameterVersion. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RegionalParameterVersion { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RegionalParameterVersion.__pulumiType; + } + + /** + * The time at which the Regional Parameter Version was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + */ + public readonly disabled!: pulumi.Output; + /** + * Location of Parameter Manager Regional parameter resource. + */ + public /*out*/ readonly location!: pulumi.Output; + /** + * The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Parameter Manager Regional Parameter resource. + */ + public readonly parameter!: pulumi.Output; + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + */ + public readonly parameterData!: pulumi.Output; + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * + * - - - + */ + public readonly parameterVersionId!: pulumi.Output; + /** + * The time at which the Regional Parameter Version was updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a RegionalParameterVersion resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RegionalParameterVersionArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RegionalParameterVersionArgs | RegionalParameterVersionState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RegionalParameterVersionState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["disabled"] = state ? state.disabled : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parameter"] = state ? state.parameter : undefined; + resourceInputs["parameterData"] = state ? state.parameterData : undefined; + resourceInputs["parameterVersionId"] = state ? state.parameterVersionId : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as RegionalParameterVersionArgs | undefined; + if ((!args || args.parameter === undefined) && !opts.urn) { + throw new Error("Missing required property 'parameter'"); + } + if ((!args || args.parameterData === undefined) && !opts.urn) { + throw new Error("Missing required property 'parameterData'"); + } + if ((!args || args.parameterVersionId === undefined) && !opts.urn) { + throw new Error("Missing required property 'parameterVersionId'"); + } + resourceInputs["disabled"] = args ? args.disabled : undefined; + resourceInputs["parameter"] = args ? args.parameter : undefined; + resourceInputs["parameterData"] = args?.parameterData ? pulumi.secret(args.parameterData) : undefined; + resourceInputs["parameterVersionId"] = args ? args.parameterVersionId : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["location"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["parameterData"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(RegionalParameterVersion.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RegionalParameterVersion resources. + */ +export interface RegionalParameterVersionState { + /** + * The time at which the Regional Parameter Version was created. + */ + createTime?: pulumi.Input; + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + */ + disabled?: pulumi.Input; + /** + * Location of Parameter Manager Regional parameter resource. + */ + location?: pulumi.Input; + /** + * The resource name of the Regional Parameter Version. Format: + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + */ + name?: pulumi.Input; + /** + * Parameter Manager Regional Parameter resource. + */ + parameter?: pulumi.Input; + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + */ + parameterData?: pulumi.Input; + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * + * - - - + */ + parameterVersionId?: pulumi.Input; + /** + * The time at which the Regional Parameter Version was updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RegionalParameterVersion resource. + */ +export interface RegionalParameterVersionArgs { + /** + * The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + */ + disabled?: pulumi.Input; + /** + * Parameter Manager Regional Parameter resource. + */ + parameter: pulumi.Input; + /** + * The Regional Parameter data. + * **Note**: This property is sensitive and will not be displayed in the plan. + */ + parameterData: pulumi.Input; + /** + * Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + * + * + * - - - + */ + parameterVersionId: pulumi.Input; +} diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index b4e5d969f9..244547aeb7 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -72,6 +72,7 @@ export class Provider extends pulumi.ProviderResource { public readonly clouddeployCustomEndpoint!: pulumi.Output; public readonly clouddomainsCustomEndpoint!: pulumi.Output; public readonly cloudfunctions2CustomEndpoint!: pulumi.Output; + public readonly colabCustomEndpoint!: pulumi.Output; public readonly composerCustomEndpoint!: pulumi.Output; public readonly computeCustomEndpoint!: pulumi.Output; public readonly containerAnalysisCustomEndpoint!: pulumi.Output; @@ -153,6 +154,8 @@ export class Provider extends pulumi.ProviderResource { public readonly osConfigCustomEndpoint!: pulumi.Output; public readonly osLoginCustomEndpoint!: pulumi.Output; public readonly parallelstoreCustomEndpoint!: pulumi.Output; + public readonly parameterManagerCustomEndpoint!: pulumi.Output; + public readonly parameterManagerRegionalCustomEndpoint!: pulumi.Output; public readonly privatecaCustomEndpoint!: pulumi.Output; public readonly privilegedAccessManagerCustomEndpoint!: pulumi.Output; public readonly project!: pulumi.Output; @@ -260,6 +263,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["clouddeployCustomEndpoint"] = args ? args.clouddeployCustomEndpoint : undefined; resourceInputs["clouddomainsCustomEndpoint"] = args ? args.clouddomainsCustomEndpoint : undefined; resourceInputs["cloudfunctions2CustomEndpoint"] = args ? args.cloudfunctions2CustomEndpoint : undefined; + resourceInputs["colabCustomEndpoint"] = args ? args.colabCustomEndpoint : undefined; resourceInputs["composerCustomEndpoint"] = args ? args.composerCustomEndpoint : undefined; resourceInputs["computeCustomEndpoint"] = args ? args.computeCustomEndpoint : undefined; resourceInputs["containerAnalysisCustomEndpoint"] = args ? args.containerAnalysisCustomEndpoint : undefined; @@ -344,6 +348,8 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["osConfigCustomEndpoint"] = args ? args.osConfigCustomEndpoint : undefined; resourceInputs["osLoginCustomEndpoint"] = args ? args.osLoginCustomEndpoint : undefined; resourceInputs["parallelstoreCustomEndpoint"] = args ? args.parallelstoreCustomEndpoint : undefined; + resourceInputs["parameterManagerCustomEndpoint"] = args ? args.parameterManagerCustomEndpoint : undefined; + resourceInputs["parameterManagerRegionalCustomEndpoint"] = args ? args.parameterManagerRegionalCustomEndpoint : undefined; resourceInputs["privatecaCustomEndpoint"] = args ? args.privatecaCustomEndpoint : undefined; resourceInputs["privilegedAccessManagerCustomEndpoint"] = args ? args.privilegedAccessManagerCustomEndpoint : undefined; resourceInputs["project"] = (args ? args.project : undefined) ?? utilities.getEnv("GOOGLE_PROJECT", "GOOGLE_CLOUD_PROJECT", "GCLOUD_PROJECT", "CLOUDSDK_CORE_PROJECT"); @@ -453,6 +459,7 @@ export interface ProviderArgs { clouddeployCustomEndpoint?: pulumi.Input; clouddomainsCustomEndpoint?: pulumi.Input; cloudfunctions2CustomEndpoint?: pulumi.Input; + colabCustomEndpoint?: pulumi.Input; composerCustomEndpoint?: pulumi.Input; computeCustomEndpoint?: pulumi.Input; containerAnalysisCustomEndpoint?: pulumi.Input; @@ -537,6 +544,8 @@ export interface ProviderArgs { osConfigCustomEndpoint?: pulumi.Input; osLoginCustomEndpoint?: pulumi.Input; parallelstoreCustomEndpoint?: pulumi.Input; + parameterManagerCustomEndpoint?: pulumi.Input; + parameterManagerRegionalCustomEndpoint?: pulumi.Input; privatecaCustomEndpoint?: pulumi.Input; privilegedAccessManagerCustomEndpoint?: pulumi.Input; project?: pulumi.Input; diff --git a/sdk/nodejs/pubsub/subscription.ts b/sdk/nodejs/pubsub/subscription.ts index c872a1b1fb..0ce14cb9ae 100644 --- a/sdk/nodejs/pubsub/subscription.ts +++ b/sdk/nodejs/pubsub/subscription.ts @@ -243,7 +243,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_69391", + * filenameSuffix: "-_8270", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", @@ -280,7 +280,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_8270", + * filenameSuffix: "-_41150", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", @@ -324,7 +324,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_41150", + * filenameSuffix: "-_89313", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", diff --git a/sdk/nodejs/sql/databaseInstance.ts b/sdk/nodejs/sql/databaseInstance.ts index 84bd9126fe..da8a9c8cbb 100644 --- a/sdk/nodejs/sql/databaseInstance.ts +++ b/sdk/nodejs/sql/databaseInstance.ts @@ -153,9 +153,9 @@ import * as utilities from "../utilities"; * }); * ``` * - * ## Switchover (SQL Server Only) + * ## Switchover * - * Users can perform a switchover on any direct `cascadable` replica by following the steps below. + * Users can perform a switchover on a replica by following the steps below. * * ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. * @@ -163,22 +163,26 @@ import * as utilities from "../utilities"; * * ### Steps to Invoke Switchover * - * Create a `cascadable` replica in a different region from the primary (`cascadableReplica` is set to true in `replicaConfiguration`) + * MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. + * + * SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadableReplica` is set to true in `replicaConfiguration`) * * #### Invoking switchover in the replica resource: * 1. Change instanceType from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` * 2. Remove `masterInstanceName` - * 3. Remove `replicaConfiguration` + * 3. (SQL Server) Remove `replicaConfiguration` * 4. Add current primary's name to the replica's `replicaNames` list + * 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. + * 6. (MySQL/PostgreSQL) Adjust `backupConfiguration`. See Switchover Guide for details. * * #### Updating the primary resource: * 1. Change `instanceType` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` * 2. Set `masterInstanceName` to the original replica (which will be primary after switchover) - * 3. Set `replicaConfiguration` and set `cascadableReplica` to `true` + * 3. (SQL Server) Set `replicaConfiguration` and set `cascadableReplica` to `true` * 4. Remove original replica from `replicaNames` - * - * > **NOTE**: Do **not** delete the replicaNames field, even if it has no replicas remaining. Set replicaNames = [ ] to indicate it having no replicas. - * + * * **NOTE**: Do **not** delete the replicaNames field, even if it has no replicas remaining. Set replicaNames = [ ] to indicate it having no replicas. + * 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. + * 6. (MySQL/PostgreSQL) Adjust `backupConfiguration`. See Switchover Guide for details. * #### Plan and verify that: * - `pulumi preview` outputs **"0 to add, 0 to destroy"** * - `pulumi preview` does not say **"must be replaced"** for any resource @@ -350,6 +354,11 @@ export class DatabaseInstance extends pulumi.CustomResource { * List of replica names. Can be updated. */ public readonly replicaNames!: pulumi.Output; + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + */ + public readonly replicationCluster!: pulumi.Output; /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -410,6 +419,7 @@ export class DatabaseInstance extends pulumi.CustomResource { resourceInputs["region"] = state ? state.region : undefined; resourceInputs["replicaConfiguration"] = state ? state.replicaConfiguration : undefined; resourceInputs["replicaNames"] = state ? state.replicaNames : undefined; + resourceInputs["replicationCluster"] = state ? state.replicationCluster : undefined; resourceInputs["restoreBackupContext"] = state ? state.restoreBackupContext : undefined; resourceInputs["rootPassword"] = state ? state.rootPassword : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; @@ -433,6 +443,7 @@ export class DatabaseInstance extends pulumi.CustomResource { resourceInputs["region"] = args ? args.region : undefined; resourceInputs["replicaConfiguration"] = args?.replicaConfiguration ? pulumi.secret(args.replicaConfiguration) : undefined; resourceInputs["replicaNames"] = args ? args.replicaNames : undefined; + resourceInputs["replicationCluster"] = args ? args.replicationCluster : undefined; resourceInputs["restoreBackupContext"] = args ? args.restoreBackupContext : undefined; resourceInputs["rootPassword"] = args?.rootPassword ? pulumi.secret(args.rootPassword) : undefined; resourceInputs["settings"] = args ? args.settings : undefined; @@ -565,6 +576,11 @@ export interface DatabaseInstanceState { * List of replica names. Can be updated. */ replicaNames?: pulumi.Input[]>; + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + */ + replicationCluster?: pulumi.Input; /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. @@ -673,6 +689,11 @@ export interface DatabaseInstanceArgs { * List of replica names. Can be updated. */ replicaNames?: pulumi.Input[]>; + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + * after both the primary and replica are created. + */ + replicationCluster?: pulumi.Input; /** * The context needed to restore the database to a backup run. This field will * cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. diff --git a/sdk/nodejs/sql/getDatabaseInstance.ts b/sdk/nodejs/sql/getDatabaseInstance.ts index 3111d41e2e..a37da28124 100644 --- a/sdk/nodejs/sql/getDatabaseInstance.ts +++ b/sdk/nodejs/sql/getDatabaseInstance.ts @@ -70,6 +70,7 @@ export interface GetDatabaseInstanceResult { readonly region: string; readonly replicaConfigurations: outputs.sql.GetDatabaseInstanceReplicaConfiguration[]; readonly replicaNames: string[]; + readonly replicationClusters: outputs.sql.GetDatabaseInstanceReplicationCluster[]; readonly restoreBackupContexts: outputs.sql.GetDatabaseInstanceRestoreBackupContext[]; readonly rootPassword: string; readonly selfLink: string; diff --git a/sdk/nodejs/sql/sourceRepresentationInstance.ts b/sdk/nodejs/sql/sourceRepresentationInstance.ts index b4ebfaba6e..1e0e5afdc0 100644 --- a/sdk/nodejs/sql/sourceRepresentationInstance.ts +++ b/sdk/nodejs/sql/sourceRepresentationInstance.ts @@ -113,8 +113,7 @@ export class SourceRepresentationInstance extends pulumi.CustomResource { */ public readonly clientKey!: pulumi.Output; /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. */ public readonly databaseVersion!: pulumi.Output; /** @@ -227,8 +226,7 @@ export interface SourceRepresentationInstanceState { */ clientKey?: pulumi.Input; /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. */ databaseVersion?: pulumi.Input; /** @@ -289,8 +287,7 @@ export interface SourceRepresentationInstanceArgs { */ clientKey?: pulumi.Input; /** - * The MySQL version running on your source database server. - * Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + * The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. */ databaseVersion: pulumi.Input; /** diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index cc2c626646..b3470714ad 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -76,6 +76,7 @@ "apigee/envKeystore.ts", "apigee/envReferences.ts", "apigee/environment.ts", + "apigee/environmentAddonsConfig.ts", "apigee/environmentIamBinding.ts", "apigee/environmentIamMember.ts", "apigee/environmentIamPolicy.ts", @@ -252,6 +253,9 @@ "chronicle/dataAccessLabel.ts", "chronicle/dataAccessScope.ts", "chronicle/index.ts", + "chronicle/referenceList.ts", + "chronicle/rule.ts", + "chronicle/ruleDeployment.ts", "chronicle/watchlist.ts", "cloudasset/folderFeed.ts", "cloudasset/getResourcesSearchAll.ts", @@ -349,6 +353,8 @@ "cloudtasks/queueIamBinding.ts", "cloudtasks/queueIamMember.ts", "cloudtasks/queueIamPolicy.ts", + "colab/index.ts", + "colab/runtimeTemplate.ts", "composer/environment.ts", "composer/getEnvironment.ts", "composer/getImageVersions.ts", @@ -764,6 +770,7 @@ "edgecontainer/nodePool.ts", "edgecontainer/vpnConnection.ts", "edgenetwork/index.ts", + "edgenetwork/interconnectAttachment.ts", "edgenetwork/network.ts", "edgenetwork/subnet.ts", "endpoints/consumersIamBinding.ts", @@ -1199,6 +1206,11 @@ "oslogin/sshPublicKey.ts", "parallelstore/index.ts", "parallelstore/instance.ts", + "parametermanager/getRegionalParameter.ts", + "parametermanager/index.ts", + "parametermanager/parameter.ts", + "parametermanager/regionalParameter.ts", + "parametermanager/regionalParameterVersion.ts", "privilegedaccessmanager/entitlement.ts", "privilegedaccessmanager/getEntitlement.ts", "privilegedaccessmanager/index.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 38deed5e1e..052c1794d7 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -9971,6 +9971,91 @@ export namespace chronicle { ingestionLabelValue?: pulumi.Input; } + export interface ReferenceListEntry { + /** + * Required. The value of the entry. Maximum length is 512 characters. + * + * - - - + */ + value: pulumi.Input; + } + + export interface ReferenceListScopeInfo { + /** + * ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + */ + referenceListScope: pulumi.Input; + } + + export interface ReferenceListScopeInfoReferenceListScope { + /** + * Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + */ + scopeNames?: pulumi.Input[]>; + } + + export interface RuleCompilationDiagnostic { + /** + * (Output) + * Output only. The diagnostic message. + */ + message?: pulumi.Input; + /** + * CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + */ + position?: pulumi.Input; + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + */ + severity?: pulumi.Input; + /** + * (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + */ + uri?: pulumi.Input; + } + + export interface RuleCompilationDiagnosticPosition { + /** + * (Output) + * Output only. End column number, beginning at 1. + */ + endColumn?: pulumi.Input; + /** + * (Output) + * Output only. End line number, beginning at 1. + */ + endLine?: pulumi.Input; + /** + * (Output) + * Output only. Start column number, beginning at 1. + */ + startColumn?: pulumi.Input; + /** + * (Output) + * Output only. Start line number, beginning at 1. + */ + startLine?: pulumi.Input; + } + + export interface RuleSeverity { + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + */ + displayName?: pulumi.Input; + } + export interface WatchlistEntityCount { /** * (Output) @@ -15532,6 +15617,77 @@ export namespace cloudtasks { } } +export namespace colab { + export interface RuntimeTemplateDataPersistentDiskSpec { + /** + * The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + */ + diskSizeGb?: pulumi.Input; + /** + * The type of the persistent disk. + */ + diskType?: pulumi.Input; + } + + export interface RuntimeTemplateEncryptionSpec { + /** + * The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + */ + kmsKeyName?: pulumi.Input; + } + + export interface RuntimeTemplateEucConfig { + /** + * Disable end user credential access for the runtime. + */ + eucDisabled?: pulumi.Input; + } + + export interface RuntimeTemplateIdleShutdownConfig { + /** + * The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + */ + idleTimeout?: pulumi.Input; + } + + export interface RuntimeTemplateMachineSpec { + /** + * The number of accelerators used by the runtime. + */ + acceleratorCount?: pulumi.Input; + /** + * The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + */ + acceleratorType?: pulumi.Input; + /** + * The Compute Engine machine type selected for the runtime. + */ + machineType?: pulumi.Input; + } + + export interface RuntimeTemplateNetworkSpec { + /** + * Enable public internet access for the runtime. + */ + enableInternetAccess?: pulumi.Input; + /** + * The name of the VPC that this runtime is in. + */ + network?: pulumi.Input; + /** + * The name of the subnetwork that this runtime is in. + */ + subnetwork?: pulumi.Input; + } + + export interface RuntimeTemplateShieldedVmConfig { + /** + * Enables secure boot for the runtime. + */ + enableSecureBoot?: pulumi.Input; + } +} + export namespace composer { export interface EnvironmentConfig { /** @@ -19550,7 +19706,7 @@ export namespace compute { */ securityPolicy?: pulumi.Input; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType?: pulumi.Input; /** @@ -20129,7 +20285,7 @@ export namespace compute { */ queueCount?: pulumi.Input; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType?: pulumi.Input; /** @@ -23272,7 +23428,7 @@ export namespace compute { */ queueCount?: pulumi.Input; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType?: pulumi.Input; /** @@ -49815,6 +49971,17 @@ export namespace discoveryengine { companyName?: pulumi.Input; } + export interface DataStoreAdvancedSiteSearchConfig { + /** + * If set true, automatic refresh is disabled for the DataStore. + */ + disableAutomaticRefresh?: pulumi.Input; + /** + * If set true, initial indexing is disabled for the DataStore. + */ + disableInitialIndex?: pulumi.Input; + } + export interface DataStoreDocumentProcessingConfig { /** * Whether chunking mode is enabled. @@ -68615,6 +68782,45 @@ export namespace osconfig { } } +export namespace parametermanager { + export interface ParameterPolicyMember { + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + */ + iamPolicyNamePrincipal?: pulumi.Input; + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + */ + iamPolicyUidPrincipal?: pulumi.Input; + } + + export interface RegionalParameterPolicyMember { + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + */ + iamPolicyNamePrincipal?: pulumi.Input; + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + */ + iamPolicyUidPrincipal?: pulumi.Input; + } +} + export namespace privilegedaccessmanager { export interface EntitlementAdditionalNotificationTargets { /** @@ -71975,6 +72181,17 @@ export namespace sql { verifyServerCertificate?: pulumi.Input; } + export interface DatabaseInstanceReplicationCluster { + /** + * Read-only field that indicates whether the replica is a DR replica. + */ + drReplica?: pulumi.Input; + /** + * If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + */ + failoverDrReplicaName?: pulumi.Input; + } + export interface DatabaseInstanceRestoreBackupContext { /** * The ID of the backup run to restore from. diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 4badfc180c..c5790708ae 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -11544,6 +11544,91 @@ export namespace chronicle { ingestionLabelValue?: string; } + export interface ReferenceListEntry { + /** + * Required. The value of the entry. Maximum length is 512 characters. + * + * - - - + */ + value: string; + } + + export interface ReferenceListScopeInfo { + /** + * ReferenceListScope specifies the list of scope names of the reference list. + * Structure is documented below. + */ + referenceListScope: outputs.chronicle.ReferenceListScopeInfoReferenceListScope; + } + + export interface ReferenceListScopeInfoReferenceListScope { + /** + * Optional. The list of scope names of the reference list. The scope names should be + * full resource names and should be of the format: + * "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + */ + scopeNames?: string[]; + } + + export interface RuleCompilationDiagnostic { + /** + * (Output) + * Output only. The diagnostic message. + */ + message: string; + /** + * CompilationPosition represents the location of a compilation diagnostic in + * rule text. + * Structure is documented below. + */ + position?: outputs.chronicle.RuleCompilationDiagnosticPosition; + /** + * (Output) + * Output only. The severity of a rule's compilation diagnostic. + * Possible values: + * SEVERITY_UNSPECIFIED + * WARNING + * ERROR + */ + severity: string; + /** + * (Output) + * Output only. Link to documentation that describes a diagnostic in more detail. + */ + uri: string; + } + + export interface RuleCompilationDiagnosticPosition { + /** + * (Output) + * Output only. End column number, beginning at 1. + */ + endColumn: number; + /** + * (Output) + * Output only. End line number, beginning at 1. + */ + endLine: number; + /** + * (Output) + * Output only. Start column number, beginning at 1. + */ + startColumn: number; + /** + * (Output) + * Output only. Start line number, beginning at 1. + */ + startLine: number; + } + + export interface RuleSeverity { + /** + * The display name of the severity level. Extracted from the meta section of + * the rule text. + */ + displayName?: string; + } + export interface WatchlistEntityCount { /** * (Output) @@ -20614,6 +20699,78 @@ export namespace cloudtasks { } +export namespace colab { + export interface RuntimeTemplateDataPersistentDiskSpec { + /** + * The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + */ + diskSizeGb: string; + /** + * The type of the persistent disk. + */ + diskType: string; + } + + export interface RuntimeTemplateEncryptionSpec { + /** + * The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + */ + kmsKeyName?: string; + } + + export interface RuntimeTemplateEucConfig { + /** + * Disable end user credential access for the runtime. + */ + eucDisabled?: boolean; + } + + export interface RuntimeTemplateIdleShutdownConfig { + /** + * The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + */ + idleTimeout: string; + } + + export interface RuntimeTemplateMachineSpec { + /** + * The number of accelerators used by the runtime. + */ + acceleratorCount: number; + /** + * The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + */ + acceleratorType?: string; + /** + * The Compute Engine machine type selected for the runtime. + */ + machineType: string; + } + + export interface RuntimeTemplateNetworkSpec { + /** + * Enable public internet access for the runtime. + */ + enableInternetAccess?: boolean; + /** + * The name of the VPC that this runtime is in. + */ + network: string; + /** + * The name of the subnetwork that this runtime is in. + */ + subnetwork?: string; + } + + export interface RuntimeTemplateShieldedVmConfig { + /** + * Enables secure boot for the runtime. + */ + enableSecureBoot?: boolean; + } + +} + export namespace composer { export interface EnvironmentConfig { /** @@ -29999,7 +30156,7 @@ export namespace compute { */ securityPolicy?: string; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType: string; /** @@ -30578,7 +30735,7 @@ export namespace compute { */ queueCount?: number; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType: string; /** @@ -33688,7 +33845,7 @@ export namespace compute { * Currently, only one IPv6 access config, DIRECT_IPV6, is supported. If there is no ipv6AccessConfig * specified, then this instance will have no external IPv6 Internet access. Structure documented below. */ - ipv6AccessConfigs?: outputs.compute.RegionInstanceTemplateNetworkInterfaceIpv6AccessConfig[]; + ipv6AccessConfigs: outputs.compute.RegionInstanceTemplateNetworkInterfaceIpv6AccessConfig[]; /** * One of EXTERNAL, INTERNAL to indicate whether the IP can be accessed from the Internet. This field is always inherited from its subnetwork. */ @@ -33721,7 +33878,7 @@ export namespace compute { */ queueCount?: number; /** - * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + * The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. */ stackType: string; /** @@ -62851,6 +63008,17 @@ export namespace discoveryengine { companyName?: string; } + export interface DataStoreAdvancedSiteSearchConfig { + /** + * If set true, automatic refresh is disabled for the DataStore. + */ + disableAutomaticRefresh?: boolean; + /** + * If set true, initial indexing is disabled for the DataStore. + */ + disableInitialIndex?: boolean; + } + export interface DataStoreDocumentProcessingConfig { /** * Whether chunking mode is enabled. @@ -85133,6 +85301,62 @@ export namespace osconfig { } +export namespace parametermanager { + export interface GetRegionalParameterPolicyMember { + /** + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + */ + iamPolicyNamePrincipal: string; + /** + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + */ + iamPolicyUidPrincipal: string; + } + + export interface ParameterPolicyMember { + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + * resource is deleted and recreated with the same name, the binding will be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + */ + iamPolicyNamePrincipal: string; + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + * If a resource is deleted and recreated with the same name, the binding will not be applicable to the + * new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + */ + iamPolicyUidPrincipal: string; + } + + export interface RegionalParameterPolicyMember { + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + * deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + */ + iamPolicyNamePrincipal: string; + /** + * (Output) + * IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + * a resource is deleted and recreated with the same name, the binding will not be applicable to the new + * resource. Format: + * `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + */ + iamPolicyUidPrincipal: string; + } + +} + export namespace privilegedaccessmanager { export interface EntitlementAdditionalNotificationTargets { /** @@ -89735,6 +89959,17 @@ export namespace sql { verifyServerCertificate?: boolean; } + export interface DatabaseInstanceReplicationCluster { + /** + * Read-only field that indicates whether the replica is a DR replica. + */ + drReplica: boolean; + /** + * If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + */ + failoverDrReplicaName?: string; + } + export interface DatabaseInstanceRestoreBackupContext { /** * The ID of the backup run to restore from. @@ -90254,6 +90489,17 @@ export namespace sql { verifyServerCertificate: boolean; } + export interface GetDatabaseInstanceReplicationCluster { + /** + * Read-only field that indicates whether the replica is a DR replica. + */ + drReplica: boolean; + /** + * If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + */ + failoverDrReplicaName: string; + } + export interface GetDatabaseInstanceRestoreBackupContext { /** * The ID of the backup run to restore from. @@ -90701,6 +90947,10 @@ export namespace sql { * The replicas of the instance. */ replicaNames: string[]; + /** + * A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + */ + replicationClusters: outputs.sql.GetDatabaseInstancesInstanceReplicationCluster[]; restoreBackupContexts: outputs.sql.GetDatabaseInstancesInstanceRestoreBackupContext[]; /** * Initial root password. Required for MS SQL Server. @@ -90801,6 +91051,17 @@ export namespace sql { verifyServerCertificate: boolean; } + export interface GetDatabaseInstancesInstanceReplicationCluster { + /** + * Read-only field that indicates whether the replica is a DR replica. + */ + drReplica: boolean; + /** + * If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + */ + failoverDrReplicaName: string; + } + export interface GetDatabaseInstancesInstanceRestoreBackupContext { /** * The ID of the backup run to restore from. diff --git a/sdk/nodejs/vertex/aiEndpoint.ts b/sdk/nodejs/vertex/aiEndpoint.ts index f2a16d8441..26a89d3f39 100644 --- a/sdk/nodejs/vertex/aiEndpoint.ts +++ b/sdk/nodejs/vertex/aiEndpoint.ts @@ -84,7 +84,7 @@ import * as utilities from "../utilities"; * * const project = gcp.organizations.getProject({}); * const endpoint = new gcp.vertex.AiEndpoint("endpoint", { - * name: "endpoint-name_89313", + * name: "endpoint-name_60646", * displayName: "sample-endpoint", * description: "A sample vertex endpoint", * location: "us-central1", @@ -106,7 +106,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const endpoint = new gcp.vertex.AiEndpoint("endpoint", { - * name: "endpoint-name_60646", + * name: "endpoint-name_9394", * displayName: "sample-endpoint", * description: "A sample vertex endpoint", * location: "us-central1", diff --git a/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts b/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts index 6a03ada94b..6047360bba 100644 --- a/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts +++ b/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts @@ -179,8 +179,8 @@ import * as utilities from "../utilities"; * * const testProject = gcp.organizations.getProject({}); * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test_9394", - * name: "tf-test_11380", + * projectId: "tf-test_11380", + * name: "tf-test_35305", * orgId: "123456789", * billingAccount: "000000-0000000-0000000-000000", * deletionPolicy: "DELETE", diff --git a/sdk/python/pulumi_gcp/__init__.py b/sdk/python/pulumi_gcp/__init__.py index d3ae71973a..dda81a109a 100644 --- a/sdk/python/pulumi_gcp/__init__.py +++ b/sdk/python/pulumi_gcp/__init__.py @@ -86,6 +86,8 @@ cloudscheduler = __cloudscheduler import pulumi_gcp.cloudtasks as __cloudtasks cloudtasks = __cloudtasks + import pulumi_gcp.colab as __colab + colab = __colab import pulumi_gcp.composer as __composer composer = __composer import pulumi_gcp.compute as __compute @@ -204,6 +206,8 @@ oslogin = __oslogin import pulumi_gcp.parallelstore as __parallelstore parallelstore = __parallelstore + import pulumi_gcp.parametermanager as __parametermanager + parametermanager = __parametermanager import pulumi_gcp.privilegedaccessmanager as __privilegedaccessmanager privilegedaccessmanager = __privilegedaccessmanager import pulumi_gcp.projects as __projects @@ -301,6 +305,7 @@ cloudrunv2 = _utilities.lazy_import('pulumi_gcp.cloudrunv2') cloudscheduler = _utilities.lazy_import('pulumi_gcp.cloudscheduler') cloudtasks = _utilities.lazy_import('pulumi_gcp.cloudtasks') + colab = _utilities.lazy_import('pulumi_gcp.colab') composer = _utilities.lazy_import('pulumi_gcp.composer') compute = _utilities.lazy_import('pulumi_gcp.compute') config = _utilities.lazy_import('pulumi_gcp.config') @@ -360,6 +365,7 @@ osconfig = _utilities.lazy_import('pulumi_gcp.osconfig') oslogin = _utilities.lazy_import('pulumi_gcp.oslogin') parallelstore = _utilities.lazy_import('pulumi_gcp.parallelstore') + parametermanager = _utilities.lazy_import('pulumi_gcp.parametermanager') privilegedaccessmanager = _utilities.lazy_import('pulumi_gcp.privilegedaccessmanager') projects = _utilities.lazy_import('pulumi_gcp.projects') pubsub = _utilities.lazy_import('pulumi_gcp.pubsub') @@ -777,6 +783,14 @@ "gcp:apigee/environment:Environment": "Environment" } }, + { + "pkg": "gcp", + "mod": "apigee/environmentAddonsConfig", + "fqn": "pulumi_gcp.apigee", + "classes": { + "gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig": "EnvironmentAddonsConfig" + } + }, { "pkg": "gcp", "mod": "apigee/environmentIamBinding", @@ -1745,6 +1759,30 @@ "gcp:chronicle/dataAccessScope:DataAccessScope": "DataAccessScope" } }, + { + "pkg": "gcp", + "mod": "chronicle/referenceList", + "fqn": "pulumi_gcp.chronicle", + "classes": { + "gcp:chronicle/referenceList:ReferenceList": "ReferenceList" + } + }, + { + "pkg": "gcp", + "mod": "chronicle/rule", + "fqn": "pulumi_gcp.chronicle", + "classes": { + "gcp:chronicle/rule:Rule": "Rule" + } + }, + { + "pkg": "gcp", + "mod": "chronicle/ruleDeployment", + "fqn": "pulumi_gcp.chronicle", + "classes": { + "gcp:chronicle/ruleDeployment:RuleDeployment": "RuleDeployment" + } + }, { "pkg": "gcp", "mod": "chronicle/watchlist", @@ -2201,6 +2239,14 @@ "gcp:cloudtasks/queueIamPolicy:QueueIamPolicy": "QueueIamPolicy" } }, + { + "pkg": "gcp", + "mod": "colab/runtimeTemplate", + "fqn": "pulumi_gcp.colab", + "classes": { + "gcp:colab/runtimeTemplate:RuntimeTemplate": "RuntimeTemplate" + } + }, { "pkg": "gcp", "mod": "composer/environment", @@ -4569,6 +4615,14 @@ "gcp:edgecontainer/vpnConnection:VpnConnection": "VpnConnection" } }, + { + "pkg": "gcp", + "mod": "edgenetwork/interconnectAttachment", + "fqn": "pulumi_gcp.edgenetwork", + "classes": { + "gcp:edgenetwork/interconnectAttachment:InterconnectAttachment": "InterconnectAttachment" + } + }, { "pkg": "gcp", "mod": "edgenetwork/network", @@ -7033,6 +7087,30 @@ "gcp:parallelstore/instance:Instance": "Instance" } }, + { + "pkg": "gcp", + "mod": "parametermanager/parameter", + "fqn": "pulumi_gcp.parametermanager", + "classes": { + "gcp:parametermanager/parameter:Parameter": "Parameter" + } + }, + { + "pkg": "gcp", + "mod": "parametermanager/regionalParameter", + "fqn": "pulumi_gcp.parametermanager", + "classes": { + "gcp:parametermanager/regionalParameter:RegionalParameter": "RegionalParameter" + } + }, + { + "pkg": "gcp", + "mod": "parametermanager/regionalParameterVersion", + "fqn": "pulumi_gcp.parametermanager", + "classes": { + "gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion": "RegionalParameterVersion" + } + }, { "pkg": "gcp", "mod": "privilegedaccessmanager/entitlement", diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py b/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py index 71ea360383..7a06e910cb 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py @@ -217,6 +217,7 @@ def vpc_network_sources(self, value: Optional[pulumi.Input[Sequence[pulumi.Input class _AccessLevelConditionState: def __init__(__self__, *, access_level: Optional[pulumi.Input[str]] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, device_policy: Optional[pulumi.Input['AccessLevelConditionDevicePolicyArgs']] = None, ip_subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, @@ -230,6 +231,7 @@ def __init__(__self__, *, - - - + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input['AccessLevelConditionDevicePolicyArgs'] device_policy: Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed. @@ -267,6 +269,8 @@ def __init__(__self__, *, """ if access_level is not None: pulumi.set(__self__, "access_level", access_level) + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if device_policy is not None: pulumi.set(__self__, "device_policy", device_policy) if ip_subnetworks is not None: @@ -297,6 +301,18 @@ def access_level(self) -> Optional[pulumi.Input[str]]: def access_level(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "access_level", value) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="devicePolicy") def device_policy(self) -> Optional[pulumi.Input['AccessLevelConditionDevicePolicyArgs']]: @@ -672,6 +688,7 @@ def _internal_init(__self__, __props__.__dict__["regions"] = regions __props__.__dict__["required_access_levels"] = required_access_levels __props__.__dict__["vpc_network_sources"] = vpc_network_sources + __props__.__dict__["access_policy_id"] = None super(AccessLevelCondition, __self__).__init__( 'gcp:accesscontextmanager/accessLevelCondition:AccessLevelCondition', resource_name, @@ -683,6 +700,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, access_level: Optional[pulumi.Input[str]] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, device_policy: Optional[pulumi.Input[Union['AccessLevelConditionDevicePolicyArgs', 'AccessLevelConditionDevicePolicyArgsDict']]] = None, ip_subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, @@ -701,6 +719,7 @@ def get(resource_name: str, - - - + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[Union['AccessLevelConditionDevicePolicyArgs', 'AccessLevelConditionDevicePolicyArgsDict']] device_policy: Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed. @@ -741,6 +760,7 @@ def get(resource_name: str, __props__ = _AccessLevelConditionState.__new__(_AccessLevelConditionState) __props__.__dict__["access_level"] = access_level + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["device_policy"] = device_policy __props__.__dict__["ip_subnetworks"] = ip_subnetworks __props__.__dict__["members"] = members @@ -761,6 +781,14 @@ def access_level(self) -> pulumi.Output[str]: """ return pulumi.get(self, "access_level") + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="devicePolicy") def device_policy(self) -> pulumi.Output[Optional['outputs.AccessLevelConditionDevicePolicy']]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/egress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/egress_policy.py index 2b9f78a724..dddd725b96 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/egress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/egress_policy.py @@ -63,21 +63,37 @@ def resource(self, value: pulumi.Input[str]): @pulumi.input_type class _EgressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_policy_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering EgressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] egress_policy_name: The name of the Service Perimeter to add this resource to. - - - :param pulumi.Input[str] resource: A GCP resource that is inside of the service perimeter. """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if egress_policy_name is not None: pulumi.set(__self__, "egress_policy_name", egress_policy_name) if resource is not None: pulumi.set(__self__, "resource", resource) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="egressPolicyName") def egress_policy_name(self) -> Optional[pulumi.Input[str]]: @@ -198,6 +214,7 @@ def _internal_init(__self__, if resource is None and not opts.urn: raise TypeError("Missing required property 'resource'") __props__.__dict__["resource"] = resource + __props__.__dict__["access_policy_id"] = None super(EgressPolicy, __self__).__init__( 'gcp:accesscontextmanager/egressPolicy:EgressPolicy', resource_name, @@ -208,6 +225,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_policy_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None) -> 'EgressPolicy': """ @@ -217,6 +235,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] egress_policy_name: The name of the Service Perimeter to add this resource to. @@ -227,10 +246,19 @@ def get(resource_name: str, __props__ = _EgressPolicyState.__new__(_EgressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["egress_policy_name"] = egress_policy_name __props__.__dict__["resource"] = resource return EgressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="egressPolicyName") def egress_policy_name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/ingress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/ingress_policy.py index 1e98d35bc4..00767b6a73 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/ingress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/ingress_policy.py @@ -63,21 +63,37 @@ def resource(self, value: pulumi.Input[str]): @pulumi.input_type class _IngressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_policy_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering IngressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] ingress_policy_name: The name of the Service Perimeter to add this resource to. - - - :param pulumi.Input[str] resource: A GCP resource that is inside of the service perimeter. """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if ingress_policy_name is not None: pulumi.set(__self__, "ingress_policy_name", ingress_policy_name) if resource is not None: pulumi.set(__self__, "resource", resource) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="ingressPolicyName") def ingress_policy_name(self) -> Optional[pulumi.Input[str]]: @@ -198,6 +214,7 @@ def _internal_init(__self__, if resource is None and not opts.urn: raise TypeError("Missing required property 'resource'") __props__.__dict__["resource"] = resource + __props__.__dict__["access_policy_id"] = None super(IngressPolicy, __self__).__init__( 'gcp:accesscontextmanager/ingressPolicy:IngressPolicy', resource_name, @@ -208,6 +225,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_policy_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None) -> 'IngressPolicy': """ @@ -217,6 +235,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] ingress_policy_name: The name of the Service Perimeter to add this resource to. @@ -227,10 +246,19 @@ def get(resource_name: str, __props__ = _IngressPolicyState.__new__(_IngressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["ingress_policy_name"] = ingress_policy_name __props__.__dict__["resource"] = resource return IngressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="ingressPolicyName") def ingress_policy_name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py index 96f2fb3c1e..2708875628 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py @@ -88,11 +88,13 @@ def egress_to(self, value: Optional[pulumi.Input['ServicePerimeterDryRunEgressPo @pulumi.input_type class _ServicePerimeterDryRunEgressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_from: Optional[pulumi.Input['ServicePerimeterDryRunEgressPolicyEgressFromArgs']] = None, egress_to: Optional[pulumi.Input['ServicePerimeterDryRunEgressPolicyEgressToArgs']] = None, perimeter: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterDryRunEgressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input['ServicePerimeterDryRunEgressPolicyEgressFromArgs'] egress_from: Defines conditions on the source of a request causing this `EgressPolicy` to apply. Structure is documented below. :param pulumi.Input['ServicePerimeterDryRunEgressPolicyEgressToArgs'] egress_to: Defines the conditions on the `ApiOperation` and destination resources that @@ -103,6 +105,8 @@ def __init__(__self__, *, - - - """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if egress_from is not None: pulumi.set(__self__, "egress_from", egress_from) if egress_to is not None: @@ -110,6 +114,18 @@ def __init__(__self__, *, if perimeter is not None: pulumi.set(__self__, "perimeter", perimeter) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="egressFrom") def egress_from(self) -> Optional[pulumi.Input['ServicePerimeterDryRunEgressPolicyEgressFromArgs']]: @@ -262,6 +278,7 @@ def _internal_init(__self__, if perimeter is None and not opts.urn: raise TypeError("Missing required property 'perimeter'") __props__.__dict__["perimeter"] = perimeter + __props__.__dict__["access_policy_id"] = None super(ServicePerimeterDryRunEgressPolicy, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy', resource_name, @@ -272,6 +289,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_from: Optional[pulumi.Input[Union['ServicePerimeterDryRunEgressPolicyEgressFromArgs', 'ServicePerimeterDryRunEgressPolicyEgressFromArgsDict']]] = None, egress_to: Optional[pulumi.Input[Union['ServicePerimeterDryRunEgressPolicyEgressToArgs', 'ServicePerimeterDryRunEgressPolicyEgressToArgsDict']]] = None, perimeter: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterDryRunEgressPolicy': @@ -282,6 +300,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[Union['ServicePerimeterDryRunEgressPolicyEgressFromArgs', 'ServicePerimeterDryRunEgressPolicyEgressFromArgsDict']] egress_from: Defines conditions on the source of a request causing this `EgressPolicy` to apply. Structure is documented below. :param pulumi.Input[Union['ServicePerimeterDryRunEgressPolicyEgressToArgs', 'ServicePerimeterDryRunEgressPolicyEgressToArgsDict']] egress_to: Defines the conditions on the `ApiOperation` and destination resources that @@ -296,11 +315,20 @@ def get(resource_name: str, __props__ = _ServicePerimeterDryRunEgressPolicyState.__new__(_ServicePerimeterDryRunEgressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["egress_from"] = egress_from __props__.__dict__["egress_to"] = egress_to __props__.__dict__["perimeter"] = perimeter return ServicePerimeterDryRunEgressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="egressFrom") def egress_from(self) -> pulumi.Output[Optional['outputs.ServicePerimeterDryRunEgressPolicyEgressFrom']]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py index e92f76956e..0abcd9d61a 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py @@ -90,11 +90,13 @@ def ingress_to(self, value: Optional[pulumi.Input['ServicePerimeterDryRunIngress @pulumi.input_type class _ServicePerimeterDryRunIngressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_from: Optional[pulumi.Input['ServicePerimeterDryRunIngressPolicyIngressFromArgs']] = None, ingress_to: Optional[pulumi.Input['ServicePerimeterDryRunIngressPolicyIngressToArgs']] = None, perimeter: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterDryRunIngressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input['ServicePerimeterDryRunIngressPolicyIngressFromArgs'] ingress_from: Defines the conditions on the source of a request causing this `IngressPolicy` to apply. Structure is documented below. @@ -106,6 +108,8 @@ def __init__(__self__, *, - - - """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if ingress_from is not None: pulumi.set(__self__, "ingress_from", ingress_from) if ingress_to is not None: @@ -113,6 +117,18 @@ def __init__(__self__, *, if perimeter is not None: pulumi.set(__self__, "perimeter", perimeter) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="ingressFrom") def ingress_from(self) -> Optional[pulumi.Input['ServicePerimeterDryRunIngressPolicyIngressFromArgs']]: @@ -269,6 +285,7 @@ def _internal_init(__self__, if perimeter is None and not opts.urn: raise TypeError("Missing required property 'perimeter'") __props__.__dict__["perimeter"] = perimeter + __props__.__dict__["access_policy_id"] = None super(ServicePerimeterDryRunIngressPolicy, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy', resource_name, @@ -279,6 +296,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_from: Optional[pulumi.Input[Union['ServicePerimeterDryRunIngressPolicyIngressFromArgs', 'ServicePerimeterDryRunIngressPolicyIngressFromArgsDict']]] = None, ingress_to: Optional[pulumi.Input[Union['ServicePerimeterDryRunIngressPolicyIngressToArgs', 'ServicePerimeterDryRunIngressPolicyIngressToArgsDict']]] = None, perimeter: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterDryRunIngressPolicy': @@ -289,6 +307,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[Union['ServicePerimeterDryRunIngressPolicyIngressFromArgs', 'ServicePerimeterDryRunIngressPolicyIngressFromArgsDict']] ingress_from: Defines the conditions on the source of a request causing this `IngressPolicy` to apply. Structure is documented below. @@ -304,11 +323,20 @@ def get(resource_name: str, __props__ = _ServicePerimeterDryRunIngressPolicyState.__new__(_ServicePerimeterDryRunIngressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["ingress_from"] = ingress_from __props__.__dict__["ingress_to"] = ingress_to __props__.__dict__["perimeter"] = perimeter return ServicePerimeterDryRunIngressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="ingressFrom") def ingress_from(self) -> pulumi.Output[Optional['outputs.ServicePerimeterDryRunIngressPolicyIngressFrom']]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_resource.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_resource.py index 6b8804f24e..8374fe8fb5 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_resource.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_resource.py @@ -67,10 +67,12 @@ def resource(self, value: pulumi.Input[str]): @pulumi.input_type class _ServicePerimeterDryRunResourceState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, perimeter_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterDryRunResource resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] perimeter_name: The name of the Service Perimeter to add this resource to. @@ -79,11 +81,25 @@ def __init__(__self__, *, Currently only projects are allowed. Format: projects/{project_number} """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if perimeter_name is not None: pulumi.set(__self__, "perimeter_name", perimeter_name) if resource is not None: pulumi.set(__self__, "resource", resource) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="perimeterName") def perimeter_name(self) -> Optional[pulumi.Input[str]]: @@ -288,6 +304,7 @@ def _internal_init(__self__, if resource is None and not opts.urn: raise TypeError("Missing required property 'resource'") __props__.__dict__["resource"] = resource + __props__.__dict__["access_policy_id"] = None super(ServicePerimeterDryRunResource, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource', resource_name, @@ -298,6 +315,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, perimeter_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterDryRunResource': """ @@ -307,6 +325,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[str] perimeter_name: The name of the Service Perimeter to add this resource to. @@ -319,10 +338,19 @@ def get(resource_name: str, __props__ = _ServicePerimeterDryRunResourceState.__new__(_ServicePerimeterDryRunResourceState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["perimeter_name"] = perimeter_name __props__.__dict__["resource"] = resource return ServicePerimeterDryRunResource(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="perimeterName") def perimeter_name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py index 4ef232abf9..5b77973273 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py @@ -88,11 +88,13 @@ def egress_to(self, value: Optional[pulumi.Input['ServicePerimeterEgressPolicyEg @pulumi.input_type class _ServicePerimeterEgressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_from: Optional[pulumi.Input['ServicePerimeterEgressPolicyEgressFromArgs']] = None, egress_to: Optional[pulumi.Input['ServicePerimeterEgressPolicyEgressToArgs']] = None, perimeter: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterEgressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input['ServicePerimeterEgressPolicyEgressFromArgs'] egress_from: Defines conditions on the source of a request causing this `EgressPolicy` to apply. Structure is documented below. :param pulumi.Input['ServicePerimeterEgressPolicyEgressToArgs'] egress_to: Defines the conditions on the `ApiOperation` and destination resources that @@ -103,6 +105,8 @@ def __init__(__self__, *, - - - """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if egress_from is not None: pulumi.set(__self__, "egress_from", egress_from) if egress_to is not None: @@ -110,6 +114,18 @@ def __init__(__self__, *, if perimeter is not None: pulumi.set(__self__, "perimeter", perimeter) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="egressFrom") def egress_from(self) -> Optional[pulumi.Input['ServicePerimeterEgressPolicyEgressFromArgs']]: @@ -262,6 +278,7 @@ def _internal_init(__self__, if perimeter is None and not opts.urn: raise TypeError("Missing required property 'perimeter'") __props__.__dict__["perimeter"] = perimeter + __props__.__dict__["access_policy_id"] = None super(ServicePerimeterEgressPolicy, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy', resource_name, @@ -272,6 +289,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, egress_from: Optional[pulumi.Input[Union['ServicePerimeterEgressPolicyEgressFromArgs', 'ServicePerimeterEgressPolicyEgressFromArgsDict']]] = None, egress_to: Optional[pulumi.Input[Union['ServicePerimeterEgressPolicyEgressToArgs', 'ServicePerimeterEgressPolicyEgressToArgsDict']]] = None, perimeter: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterEgressPolicy': @@ -282,6 +300,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[Union['ServicePerimeterEgressPolicyEgressFromArgs', 'ServicePerimeterEgressPolicyEgressFromArgsDict']] egress_from: Defines conditions on the source of a request causing this `EgressPolicy` to apply. Structure is documented below. :param pulumi.Input[Union['ServicePerimeterEgressPolicyEgressToArgs', 'ServicePerimeterEgressPolicyEgressToArgsDict']] egress_to: Defines the conditions on the `ApiOperation` and destination resources that @@ -296,11 +315,20 @@ def get(resource_name: str, __props__ = _ServicePerimeterEgressPolicyState.__new__(_ServicePerimeterEgressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["egress_from"] = egress_from __props__.__dict__["egress_to"] = egress_to __props__.__dict__["perimeter"] = perimeter return ServicePerimeterEgressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="egressFrom") def egress_from(self) -> pulumi.Output[Optional['outputs.ServicePerimeterEgressPolicyEgressFrom']]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py index 1536c7bb04..f2d6031085 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py @@ -90,11 +90,13 @@ def ingress_to(self, value: Optional[pulumi.Input['ServicePerimeterIngressPolicy @pulumi.input_type class _ServicePerimeterIngressPolicyState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_from: Optional[pulumi.Input['ServicePerimeterIngressPolicyIngressFromArgs']] = None, ingress_to: Optional[pulumi.Input['ServicePerimeterIngressPolicyIngressToArgs']] = None, perimeter: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterIngressPolicy resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input['ServicePerimeterIngressPolicyIngressFromArgs'] ingress_from: Defines the conditions on the source of a request causing this `IngressPolicy` to apply. Structure is documented below. @@ -106,6 +108,8 @@ def __init__(__self__, *, - - - """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) if ingress_from is not None: pulumi.set(__self__, "ingress_from", ingress_from) if ingress_to is not None: @@ -113,6 +117,18 @@ def __init__(__self__, *, if perimeter is not None: pulumi.set(__self__, "perimeter", perimeter) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + @property @pulumi.getter(name="ingressFrom") def ingress_from(self) -> Optional[pulumi.Input['ServicePerimeterIngressPolicyIngressFromArgs']]: @@ -269,6 +285,7 @@ def _internal_init(__self__, if perimeter is None and not opts.urn: raise TypeError("Missing required property 'perimeter'") __props__.__dict__["perimeter"] = perimeter + __props__.__dict__["access_policy_id"] = None super(ServicePerimeterIngressPolicy, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy', resource_name, @@ -279,6 +296,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, ingress_from: Optional[pulumi.Input[Union['ServicePerimeterIngressPolicyIngressFromArgs', 'ServicePerimeterIngressPolicyIngressFromArgsDict']]] = None, ingress_to: Optional[pulumi.Input[Union['ServicePerimeterIngressPolicyIngressToArgs', 'ServicePerimeterIngressPolicyIngressToArgsDict']]] = None, perimeter: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterIngressPolicy': @@ -289,6 +307,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. :param pulumi.Input[Union['ServicePerimeterIngressPolicyIngressFromArgs', 'ServicePerimeterIngressPolicyIngressFromArgsDict']] ingress_from: Defines the conditions on the source of a request causing this `IngressPolicy` to apply. Structure is documented below. @@ -304,11 +323,20 @@ def get(resource_name: str, __props__ = _ServicePerimeterIngressPolicyState.__new__(_ServicePerimeterIngressPolicyState) + __props__.__dict__["access_policy_id"] = access_policy_id __props__.__dict__["ingress_from"] = ingress_from __props__.__dict__["ingress_to"] = ingress_to __props__.__dict__["perimeter"] = perimeter return ServicePerimeterIngressPolicy(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + @property @pulumi.getter(name="ingressFrom") def ingress_from(self) -> pulumi.Output[Optional['outputs.ServicePerimeterIngressPolicyIngressFrom']]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_resource.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_resource.py index d3d00b83c5..188832b09e 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_resource.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_resource.py @@ -67,10 +67,14 @@ def resource(self, value: pulumi.Input[str]): @pulumi.input_type class _ServicePerimeterResourceState: def __init__(__self__, *, + access_policy_id: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, perimeter_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering ServicePerimeterResource resources. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. + :param pulumi.Input[str] etag: The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. :param pulumi.Input[str] perimeter_name: The name of the Service Perimeter to add this resource to. @@ -79,11 +83,39 @@ def __init__(__self__, *, Currently only projects are allowed. Format: projects/{project_number} """ + if access_policy_id is not None: + pulumi.set(__self__, "access_policy_id", access_policy_id) + if etag is not None: + pulumi.set(__self__, "etag", etag) if perimeter_name is not None: pulumi.set(__self__, "perimeter_name", perimeter_name) if resource is not None: pulumi.set(__self__, "resource", resource) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @access_policy_id.setter + def access_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_policy_id", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + @property @pulumi.getter(name="perimeterName") def perimeter_name(self) -> Optional[pulumi.Input[str]]: @@ -286,6 +318,8 @@ def _internal_init(__self__, if resource is None and not opts.urn: raise TypeError("Missing required property 'resource'") __props__.__dict__["resource"] = resource + __props__.__dict__["access_policy_id"] = None + __props__.__dict__["etag"] = None super(ServicePerimeterResource, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeterResource:ServicePerimeterResource', resource_name, @@ -296,6 +330,8 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + access_policy_id: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, perimeter_name: Optional[pulumi.Input[str]] = None, resource: Optional[pulumi.Input[str]] = None) -> 'ServicePerimeterResource': """ @@ -305,6 +341,8 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] access_policy_id: The name of the Access Policy this resource belongs to. + :param pulumi.Input[str] etag: The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. :param pulumi.Input[str] perimeter_name: The name of the Service Perimeter to add this resource to. @@ -317,10 +355,28 @@ def get(resource_name: str, __props__ = _ServicePerimeterResourceState.__new__(_ServicePerimeterResourceState) + __props__.__dict__["access_policy_id"] = access_policy_id + __props__.__dict__["etag"] = etag __props__.__dict__["perimeter_name"] = perimeter_name __props__.__dict__["resource"] = resource return ServicePerimeterResource(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="accessPolicyId") + def access_policy_id(self) -> pulumi.Output[str]: + """ + The name of the Access Policy this resource belongs to. + """ + return pulumi.get(self, "access_policy_id") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + The perimeter etag is internally used to prevent overwriting the list of perimeter resources on PATCH calls. It is retrieved from the same GET perimeter API call that's used to get the current list of resources. The resource to add or remove is merged into that list and then this etag is sent with the PATCH call along with the updated resource list. + """ + return pulumi.get(self, "etag") + @property @pulumi.getter(name="perimeterName") def perimeter_name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/apigee/__init__.py b/sdk/python/pulumi_gcp/apigee/__init__.py index cd20927564..3dab4fcdba 100644 --- a/sdk/python/pulumi_gcp/apigee/__init__.py +++ b/sdk/python/pulumi_gcp/apigee/__init__.py @@ -15,6 +15,7 @@ from .env_keystore import * from .env_references import * from .environment import * +from .environment_addons_config import * from .environment_iam_binding import * from .environment_iam_member import * from .environment_iam_policy import * diff --git a/sdk/python/pulumi_gcp/apigee/environment_addons_config.py b/sdk/python/pulumi_gcp/apigee/environment_addons_config.py new file mode 100644 index 0000000000..44f63183f0 --- /dev/null +++ b/sdk/python/pulumi_gcp/apigee/environment_addons_config.py @@ -0,0 +1,266 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['EnvironmentAddonsConfigArgs', 'EnvironmentAddonsConfig'] + +@pulumi.input_type +class EnvironmentAddonsConfigArgs: + def __init__(__self__, *, + env_id: pulumi.Input[str], + analytics_enabled: Optional[pulumi.Input[bool]] = None): + """ + The set of arguments for constructing a EnvironmentAddonsConfig resource. + :param pulumi.Input[str] env_id: The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + :param pulumi.Input[bool] analytics_enabled: Flag to enable/disable Analytics. + """ + pulumi.set(__self__, "env_id", env_id) + if analytics_enabled is not None: + pulumi.set(__self__, "analytics_enabled", analytics_enabled) + + @property + @pulumi.getter(name="envId") + def env_id(self) -> pulumi.Input[str]: + """ + The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + return pulumi.get(self, "env_id") + + @env_id.setter + def env_id(self, value: pulumi.Input[str]): + pulumi.set(self, "env_id", value) + + @property + @pulumi.getter(name="analyticsEnabled") + def analytics_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Flag to enable/disable Analytics. + """ + return pulumi.get(self, "analytics_enabled") + + @analytics_enabled.setter + def analytics_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "analytics_enabled", value) + + +@pulumi.input_type +class _EnvironmentAddonsConfigState: + def __init__(__self__, *, + analytics_enabled: Optional[pulumi.Input[bool]] = None, + env_id: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering EnvironmentAddonsConfig resources. + :param pulumi.Input[bool] analytics_enabled: Flag to enable/disable Analytics. + :param pulumi.Input[str] env_id: The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + if analytics_enabled is not None: + pulumi.set(__self__, "analytics_enabled", analytics_enabled) + if env_id is not None: + pulumi.set(__self__, "env_id", env_id) + + @property + @pulumi.getter(name="analyticsEnabled") + def analytics_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Flag to enable/disable Analytics. + """ + return pulumi.get(self, "analytics_enabled") + + @analytics_enabled.setter + def analytics_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "analytics_enabled", value) + + @property + @pulumi.getter(name="envId") + def env_id(self) -> Optional[pulumi.Input[str]]: + """ + The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + return pulumi.get(self, "env_id") + + @env_id.setter + def env_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "env_id", value) + + +class EnvironmentAddonsConfig(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + analytics_enabled: Optional[pulumi.Input[bool]] = None, + env_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Enable/Disable add-ons for an Apigee environment. + + To get more information about EnvironmentAddonsConfig, see: + + * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) + * How-to Guides + * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) + + ## Example Usage + + ## Import + + EnvironmentAddonsConfig can be imported using any of these accepted formats: + + * `{{env_id}}` + + When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] analytics_enabled: Flag to enable/disable Analytics. + :param pulumi.Input[str] env_id: The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: EnvironmentAddonsConfigArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Enable/Disable add-ons for an Apigee environment. + + To get more information about EnvironmentAddonsConfig, see: + + * [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments.addonsConfig/setAddonEnablement) + * How-to Guides + * [Enable Analytics Add-On](https://cloud.google.com/apigee/docs/api-platform/reference/manage-analytics-add-on) + + ## Example Usage + + ## Import + + EnvironmentAddonsConfig can be imported using any of these accepted formats: + + * `{{env_id}}` + + When using the `pulumi import` command, EnvironmentAddonsConfig can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig default {{env_id}} + ``` + + :param str resource_name: The name of the resource. + :param EnvironmentAddonsConfigArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(EnvironmentAddonsConfigArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + analytics_enabled: Optional[pulumi.Input[bool]] = None, + env_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = EnvironmentAddonsConfigArgs.__new__(EnvironmentAddonsConfigArgs) + + __props__.__dict__["analytics_enabled"] = analytics_enabled + if env_id is None and not opts.urn: + raise TypeError("Missing required property 'env_id'") + __props__.__dict__["env_id"] = env_id + super(EnvironmentAddonsConfig, __self__).__init__( + 'gcp:apigee/environmentAddonsConfig:EnvironmentAddonsConfig', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + analytics_enabled: Optional[pulumi.Input[bool]] = None, + env_id: Optional[pulumi.Input[str]] = None) -> 'EnvironmentAddonsConfig': + """ + Get an existing EnvironmentAddonsConfig resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] analytics_enabled: Flag to enable/disable Analytics. + :param pulumi.Input[str] env_id: The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _EnvironmentAddonsConfigState.__new__(_EnvironmentAddonsConfigState) + + __props__.__dict__["analytics_enabled"] = analytics_enabled + __props__.__dict__["env_id"] = env_id + return EnvironmentAddonsConfig(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="analyticsEnabled") + def analytics_enabled(self) -> pulumi.Output[Optional[bool]]: + """ + Flag to enable/disable Analytics. + """ + return pulumi.get(self, "analytics_enabled") + + @property + @pulumi.getter(name="envId") + def env_id(self) -> pulumi.Output[str]: + """ + The Apigee environment group associated with the Apigee environment, + in the format `organizations/{{org_name}}/environments/{{env_name}}`. + + + - - - + """ + return pulumi.get(self, "env_id") + diff --git a/sdk/python/pulumi_gcp/artifactregistry/repository.py b/sdk/python/pulumi_gcp/artifactregistry/repository.py index 64e48c3e2f..ca8ebf5700 100644 --- a/sdk/python/pulumi_gcp/artifactregistry/repository.py +++ b/sdk/python/pulumi_gcp/artifactregistry/repository.py @@ -947,6 +947,21 @@ def __init__(__self__, format="DOCKER", cleanup_policy_dry_run=False, cleanup_policies=[ + { + "id": "delete-untagged", + "action": "DELETE", + "condition": { + "tag_state": "UNTAGGED", + }, + }, + { + "id": "keep-new-untagged", + "action": "KEEP", + "condition": { + "tag_state": "UNTAGGED", + "newer_than": "7d", + }, + }, { "id": "delete-prerelease", "action": "DELETE", @@ -956,7 +971,7 @@ def __init__(__self__, "alpha", "v0", ], - "older_than": "2592000s", + "older_than": "30d", }, }, { @@ -1560,6 +1575,21 @@ def __init__(__self__, format="DOCKER", cleanup_policy_dry_run=False, cleanup_policies=[ + { + "id": "delete-untagged", + "action": "DELETE", + "condition": { + "tag_state": "UNTAGGED", + }, + }, + { + "id": "keep-new-untagged", + "action": "KEEP", + "condition": { + "tag_state": "UNTAGGED", + "newer_than": "7d", + }, + }, { "id": "delete-prerelease", "action": "DELETE", @@ -1569,7 +1599,7 @@ def __init__(__self__, "alpha", "v0", ], - "older_than": "2592000s", + "older_than": "30d", }, }, { diff --git a/sdk/python/pulumi_gcp/bigquery/connection.py b/sdk/python/pulumi_gcp/bigquery/connection.py index 9c2c61f609..047aa816e6 100644 --- a/sdk/python/pulumi_gcp/bigquery/connection.py +++ b/sdk/python/pulumi_gcp/bigquery/connection.py @@ -750,7 +750,7 @@ def __init__(__self__, user = gcp.sql.User("user", name="user", instance=instance.name, - password="tf-test-my-password_77884") + password="tf-test-my-password_15222") bq_sa = gcp.bigquery.get_default_service_account() key_sa_user = gcp.kms.CryptoKeyIAMMember("key_sa_user", crypto_key_id="projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key", @@ -1056,7 +1056,7 @@ def __init__(__self__, user = gcp.sql.User("user", name="user", instance=instance.name, - password="tf-test-my-password_77884") + password="tf-test-my-password_15222") bq_sa = gcp.bigquery.get_default_service_account() key_sa_user = gcp.kms.CryptoKeyIAMMember("key_sa_user", crypto_key_id="projects/project/locations/us-central1/keyRings/us-central1/cryptoKeys/bq-key", diff --git a/sdk/python/pulumi_gcp/bigquery/routine.py b/sdk/python/pulumi_gcp/bigquery/routine.py index 4048799c5e..2950e97f5d 100644 --- a/sdk/python/pulumi_gcp/bigquery/routine.py +++ b/sdk/python/pulumi_gcp/bigquery/routine.py @@ -845,7 +845,7 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - test = gcp.bigquery.Dataset("test", dataset_id="tf_test_dataset_id_15222") + test = gcp.bigquery.Dataset("test", dataset_id="tf_test_dataset_id_81126") custom_masking_routine = gcp.bigquery.Routine("custom_masking_routine", dataset_id=test.dataset_id, routine_id="custom_masking_routine", @@ -1140,7 +1140,7 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - test = gcp.bigquery.Dataset("test", dataset_id="tf_test_dataset_id_15222") + test = gcp.bigquery.Dataset("test", dataset_id="tf_test_dataset_id_81126") custom_masking_routine = gcp.bigquery.Routine("custom_masking_routine", dataset_id=test.dataset_id, routine_id="custom_masking_routine", diff --git a/sdk/python/pulumi_gcp/billing/project_info.py b/sdk/python/pulumi_gcp/billing/project_info.py index f1085f8f08..975a70c9fe 100644 --- a/sdk/python/pulumi_gcp/billing/project_info.py +++ b/sdk/python/pulumi_gcp/billing/project_info.py @@ -145,8 +145,8 @@ def __init__(__self__, import pulumi_gcp as gcp project = gcp.organizations.Project("project", - project_id="tf-test_81126", - name="tf-test_88717", + project_id="tf-test_88717", + name="tf-test_85794", org_id="123456789", deletion_policy="DELETE") default = gcp.billing.ProjectInfo("default", @@ -207,8 +207,8 @@ def __init__(__self__, import pulumi_gcp as gcp project = gcp.organizations.Project("project", - project_id="tf-test_81126", - name="tf-test_88717", + project_id="tf-test_88717", + name="tf-test_85794", org_id="123456789", deletion_policy="DELETE") default = gcp.billing.ProjectInfo("default", diff --git a/sdk/python/pulumi_gcp/chronicle/__init__.py b/sdk/python/pulumi_gcp/chronicle/__init__.py index 2719447562..9158d36634 100644 --- a/sdk/python/pulumi_gcp/chronicle/__init__.py +++ b/sdk/python/pulumi_gcp/chronicle/__init__.py @@ -7,6 +7,9 @@ # Export this package's modules as members: from .data_access_label import * from .data_access_scope import * +from .reference_list import * +from .rule import * +from .rule_deployment import * from .watchlist import * from ._inputs import * from . import outputs diff --git a/sdk/python/pulumi_gcp/chronicle/_inputs.py b/sdk/python/pulumi_gcp/chronicle/_inputs.py index edc972e22a..b14b242dac 100644 --- a/sdk/python/pulumi_gcp/chronicle/_inputs.py +++ b/sdk/python/pulumi_gcp/chronicle/_inputs.py @@ -23,6 +23,18 @@ 'DataAccessScopeDeniedDataAccessLabelArgsDict', 'DataAccessScopeDeniedDataAccessLabelIngestionLabelArgs', 'DataAccessScopeDeniedDataAccessLabelIngestionLabelArgsDict', + 'ReferenceListEntryArgs', + 'ReferenceListEntryArgsDict', + 'ReferenceListScopeInfoArgs', + 'ReferenceListScopeInfoArgsDict', + 'ReferenceListScopeInfoReferenceListScopeArgs', + 'ReferenceListScopeInfoReferenceListScopeArgsDict', + 'RuleCompilationDiagnosticArgs', + 'RuleCompilationDiagnosticArgsDict', + 'RuleCompilationDiagnosticPositionArgs', + 'RuleCompilationDiagnosticPositionArgsDict', + 'RuleSeverityArgs', + 'RuleSeverityArgsDict', 'WatchlistEntityCountArgs', 'WatchlistEntityCountArgsDict', 'WatchlistEntityPopulationMechanismArgs', @@ -415,6 +427,373 @@ def ingestion_label_value(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "ingestion_label_value", value) +if not MYPY: + class ReferenceListEntryArgsDict(TypedDict): + value: pulumi.Input[str] + """ + Required. The value of the entry. Maximum length is 512 characters. + + - - - + """ +elif False: + ReferenceListEntryArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ReferenceListEntryArgs: + def __init__(__self__, *, + value: pulumi.Input[str]): + """ + :param pulumi.Input[str] value: Required. The value of the entry. Maximum length is 512 characters. + + - - - + """ + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def value(self) -> pulumi.Input[str]: + """ + Required. The value of the entry. Maximum length is 512 characters. + + - - - + """ + return pulumi.get(self, "value") + + @value.setter + def value(self, value: pulumi.Input[str]): + pulumi.set(self, "value", value) + + +if not MYPY: + class ReferenceListScopeInfoArgsDict(TypedDict): + reference_list_scope: pulumi.Input['ReferenceListScopeInfoReferenceListScopeArgsDict'] + """ + ReferenceListScope specifies the list of scope names of the reference list. + Structure is documented below. + """ +elif False: + ReferenceListScopeInfoArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ReferenceListScopeInfoArgs: + def __init__(__self__, *, + reference_list_scope: pulumi.Input['ReferenceListScopeInfoReferenceListScopeArgs']): + """ + :param pulumi.Input['ReferenceListScopeInfoReferenceListScopeArgs'] reference_list_scope: ReferenceListScope specifies the list of scope names of the reference list. + Structure is documented below. + """ + pulumi.set(__self__, "reference_list_scope", reference_list_scope) + + @property + @pulumi.getter(name="referenceListScope") + def reference_list_scope(self) -> pulumi.Input['ReferenceListScopeInfoReferenceListScopeArgs']: + """ + ReferenceListScope specifies the list of scope names of the reference list. + Structure is documented below. + """ + return pulumi.get(self, "reference_list_scope") + + @reference_list_scope.setter + def reference_list_scope(self, value: pulumi.Input['ReferenceListScopeInfoReferenceListScopeArgs']): + pulumi.set(self, "reference_list_scope", value) + + +if not MYPY: + class ReferenceListScopeInfoReferenceListScopeArgsDict(TypedDict): + scope_names: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]] + """ + Optional. The list of scope names of the reference list. The scope names should be + full resource names and should be of the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + """ +elif False: + ReferenceListScopeInfoReferenceListScopeArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ReferenceListScopeInfoReferenceListScopeArgs: + def __init__(__self__, *, + scope_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] scope_names: Optional. The list of scope names of the reference list. The scope names should be + full resource names and should be of the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + """ + if scope_names is not None: + pulumi.set(__self__, "scope_names", scope_names) + + @property + @pulumi.getter(name="scopeNames") + def scope_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Optional. The list of scope names of the reference list. The scope names should be + full resource names and should be of the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + """ + return pulumi.get(self, "scope_names") + + @scope_names.setter + def scope_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "scope_names", value) + + +if not MYPY: + class RuleCompilationDiagnosticArgsDict(TypedDict): + message: NotRequired[pulumi.Input[str]] + """ + (Output) + Output only. The diagnostic message. + """ + position: NotRequired[pulumi.Input['RuleCompilationDiagnosticPositionArgsDict']] + """ + CompilationPosition represents the location of a compilation diagnostic in + rule text. + Structure is documented below. + """ + severity: NotRequired[pulumi.Input[str]] + """ + (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + """ + uri: NotRequired[pulumi.Input[str]] + """ + (Output) + Output only. Link to documentation that describes a diagnostic in more detail. + """ +elif False: + RuleCompilationDiagnosticArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuleCompilationDiagnosticArgs: + def __init__(__self__, *, + message: Optional[pulumi.Input[str]] = None, + position: Optional[pulumi.Input['RuleCompilationDiagnosticPositionArgs']] = None, + severity: Optional[pulumi.Input[str]] = None, + uri: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] message: (Output) + Output only. The diagnostic message. + :param pulumi.Input['RuleCompilationDiagnosticPositionArgs'] position: CompilationPosition represents the location of a compilation diagnostic in + rule text. + Structure is documented below. + :param pulumi.Input[str] severity: (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + :param pulumi.Input[str] uri: (Output) + Output only. Link to documentation that describes a diagnostic in more detail. + """ + if message is not None: + pulumi.set(__self__, "message", message) + if position is not None: + pulumi.set(__self__, "position", position) + if severity is not None: + pulumi.set(__self__, "severity", severity) + if uri is not None: + pulumi.set(__self__, "uri", uri) + + @property + @pulumi.getter + def message(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. The diagnostic message. + """ + return pulumi.get(self, "message") + + @message.setter + def message(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "message", value) + + @property + @pulumi.getter + def position(self) -> Optional[pulumi.Input['RuleCompilationDiagnosticPositionArgs']]: + """ + CompilationPosition represents the location of a compilation diagnostic in + rule text. + Structure is documented below. + """ + return pulumi.get(self, "position") + + @position.setter + def position(self, value: Optional[pulumi.Input['RuleCompilationDiagnosticPositionArgs']]): + pulumi.set(self, "position", value) + + @property + @pulumi.getter + def severity(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + """ + return pulumi.get(self, "severity") + + @severity.setter + def severity(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "severity", value) + + @property + @pulumi.getter + def uri(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. Link to documentation that describes a diagnostic in more detail. + """ + return pulumi.get(self, "uri") + + @uri.setter + def uri(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uri", value) + + +if not MYPY: + class RuleCompilationDiagnosticPositionArgsDict(TypedDict): + end_column: NotRequired[pulumi.Input[int]] + """ + (Output) + Output only. End column number, beginning at 1. + """ + end_line: NotRequired[pulumi.Input[int]] + """ + (Output) + Output only. End line number, beginning at 1. + """ + start_column: NotRequired[pulumi.Input[int]] + """ + (Output) + Output only. Start column number, beginning at 1. + """ + start_line: NotRequired[pulumi.Input[int]] + """ + (Output) + Output only. Start line number, beginning at 1. + """ +elif False: + RuleCompilationDiagnosticPositionArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuleCompilationDiagnosticPositionArgs: + def __init__(__self__, *, + end_column: Optional[pulumi.Input[int]] = None, + end_line: Optional[pulumi.Input[int]] = None, + start_column: Optional[pulumi.Input[int]] = None, + start_line: Optional[pulumi.Input[int]] = None): + """ + :param pulumi.Input[int] end_column: (Output) + Output only. End column number, beginning at 1. + :param pulumi.Input[int] end_line: (Output) + Output only. End line number, beginning at 1. + :param pulumi.Input[int] start_column: (Output) + Output only. Start column number, beginning at 1. + :param pulumi.Input[int] start_line: (Output) + Output only. Start line number, beginning at 1. + """ + if end_column is not None: + pulumi.set(__self__, "end_column", end_column) + if end_line is not None: + pulumi.set(__self__, "end_line", end_line) + if start_column is not None: + pulumi.set(__self__, "start_column", start_column) + if start_line is not None: + pulumi.set(__self__, "start_line", start_line) + + @property + @pulumi.getter(name="endColumn") + def end_column(self) -> Optional[pulumi.Input[int]]: + """ + (Output) + Output only. End column number, beginning at 1. + """ + return pulumi.get(self, "end_column") + + @end_column.setter + def end_column(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "end_column", value) + + @property + @pulumi.getter(name="endLine") + def end_line(self) -> Optional[pulumi.Input[int]]: + """ + (Output) + Output only. End line number, beginning at 1. + """ + return pulumi.get(self, "end_line") + + @end_line.setter + def end_line(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "end_line", value) + + @property + @pulumi.getter(name="startColumn") + def start_column(self) -> Optional[pulumi.Input[int]]: + """ + (Output) + Output only. Start column number, beginning at 1. + """ + return pulumi.get(self, "start_column") + + @start_column.setter + def start_column(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "start_column", value) + + @property + @pulumi.getter(name="startLine") + def start_line(self) -> Optional[pulumi.Input[int]]: + """ + (Output) + Output only. Start line number, beginning at 1. + """ + return pulumi.get(self, "start_line") + + @start_line.setter + def start_line(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "start_line", value) + + +if not MYPY: + class RuleSeverityArgsDict(TypedDict): + display_name: NotRequired[pulumi.Input[str]] + """ + The display name of the severity level. Extracted from the meta section of + the rule text. + """ +elif False: + RuleSeverityArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuleSeverityArgs: + def __init__(__self__, *, + display_name: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] display_name: The display name of the severity level. Extracted from the meta section of + the rule text. + """ + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The display name of the severity level. Extracted from the meta section of + the rule text. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + if not MYPY: class WatchlistEntityCountArgsDict(TypedDict): asset: NotRequired[pulumi.Input[int]] diff --git a/sdk/python/pulumi_gcp/chronicle/data_access_label.py b/sdk/python/pulumi_gcp/chronicle/data_access_label.py index bfceb6f485..8f5195562b 100644 --- a/sdk/python/pulumi_gcp/chronicle/data_access_label.py +++ b/sdk/python/pulumi_gcp/chronicle/data_access_label.py @@ -28,9 +28,9 @@ def __init__(__self__, *, """ The set of arguments for constructing a DataAccessLabel resource. :param pulumi.Input[str] data_access_label_id: Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -55,9 +55,9 @@ def __init__(__self__, *, def data_access_label_id(self) -> pulumi.Input[str]: """ Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -150,9 +150,9 @@ def __init__(__self__, *, :param pulumi.Input[str] author: Output only. The user who created the data access label. :param pulumi.Input[str] create_time: Output only. The time at which the data access label was created. :param pulumi.Input[str] data_access_label_id: Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -223,9 +223,9 @@ def create_time(self, value: Optional[pulumi.Input[str]]): def data_access_label_id(self) -> Optional[pulumi.Input[str]]: """ Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -404,9 +404,9 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] data_access_label_id: Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -546,9 +546,9 @@ def get(resource_name: str, :param pulumi.Input[str] author: Output only. The user who created the data access label. :param pulumi.Input[str] create_time: Output only. The time at which the data access label was created. :param pulumi.Input[str] data_access_label_id: Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - @@ -604,9 +604,9 @@ def create_time(self) -> pulumi.Output[str]: def data_access_label_id(self) -> pulumi.Output[str]: """ Required. The ID to use for the data access label, which will become the label's - display name and the final component of the label's resource name. It must - only contain ASCII lowercase letters, numbers, and dashes; it must begin - with a letter, and it must not exceed 1000 characters. + display name and the final component of the label's resource name. The + maximum number of characters should be 63. Regex pattern is as per AIP: + https://google.aip.dev/122#resource-id-segments - - - diff --git a/sdk/python/pulumi_gcp/chronicle/outputs.py b/sdk/python/pulumi_gcp/chronicle/outputs.py index 4f85a4e4e6..494fa8cdd7 100644 --- a/sdk/python/pulumi_gcp/chronicle/outputs.py +++ b/sdk/python/pulumi_gcp/chronicle/outputs.py @@ -20,6 +20,12 @@ 'DataAccessScopeAllowedDataAccessLabelIngestionLabel', 'DataAccessScopeDeniedDataAccessLabel', 'DataAccessScopeDeniedDataAccessLabelIngestionLabel', + 'ReferenceListEntry', + 'ReferenceListScopeInfo', + 'ReferenceListScopeInfoReferenceListScope', + 'RuleCompilationDiagnostic', + 'RuleCompilationDiagnosticPosition', + 'RuleSeverity', 'WatchlistEntityCount', 'WatchlistEntityPopulationMechanism', 'WatchlistEntityPopulationMechanismManual', @@ -344,6 +350,302 @@ def ingestion_label_value(self) -> Optional[str]: return pulumi.get(self, "ingestion_label_value") +@pulumi.output_type +class ReferenceListEntry(dict): + def __init__(__self__, *, + value: str): + """ + :param str value: Required. The value of the entry. Maximum length is 512 characters. + + - - - + """ + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def value(self) -> str: + """ + Required. The value of the entry. Maximum length is 512 characters. + + - - - + """ + return pulumi.get(self, "value") + + +@pulumi.output_type +class ReferenceListScopeInfo(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "referenceListScope": + suggest = "reference_list_scope" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ReferenceListScopeInfo. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ReferenceListScopeInfo.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ReferenceListScopeInfo.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + reference_list_scope: 'outputs.ReferenceListScopeInfoReferenceListScope'): + """ + :param 'ReferenceListScopeInfoReferenceListScopeArgs' reference_list_scope: ReferenceListScope specifies the list of scope names of the reference list. + Structure is documented below. + """ + pulumi.set(__self__, "reference_list_scope", reference_list_scope) + + @property + @pulumi.getter(name="referenceListScope") + def reference_list_scope(self) -> 'outputs.ReferenceListScopeInfoReferenceListScope': + """ + ReferenceListScope specifies the list of scope names of the reference list. + Structure is documented below. + """ + return pulumi.get(self, "reference_list_scope") + + +@pulumi.output_type +class ReferenceListScopeInfoReferenceListScope(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "scopeNames": + suggest = "scope_names" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ReferenceListScopeInfoReferenceListScope. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ReferenceListScopeInfoReferenceListScope.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ReferenceListScopeInfoReferenceListScope.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + scope_names: Optional[Sequence[str]] = None): + """ + :param Sequence[str] scope_names: Optional. The list of scope names of the reference list. The scope names should be + full resource names and should be of the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + """ + if scope_names is not None: + pulumi.set(__self__, "scope_names", scope_names) + + @property + @pulumi.getter(name="scopeNames") + def scope_names(self) -> Optional[Sequence[str]]: + """ + Optional. The list of scope names of the reference list. The scope names should be + full resource names and should be of the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope_name}". + """ + return pulumi.get(self, "scope_names") + + +@pulumi.output_type +class RuleCompilationDiagnostic(dict): + def __init__(__self__, *, + message: Optional[str] = None, + position: Optional['outputs.RuleCompilationDiagnosticPosition'] = None, + severity: Optional[str] = None, + uri: Optional[str] = None): + """ + :param str message: (Output) + Output only. The diagnostic message. + :param 'RuleCompilationDiagnosticPositionArgs' position: CompilationPosition represents the location of a compilation diagnostic in + rule text. + Structure is documented below. + :param str severity: (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + :param str uri: (Output) + Output only. Link to documentation that describes a diagnostic in more detail. + """ + if message is not None: + pulumi.set(__self__, "message", message) + if position is not None: + pulumi.set(__self__, "position", position) + if severity is not None: + pulumi.set(__self__, "severity", severity) + if uri is not None: + pulumi.set(__self__, "uri", uri) + + @property + @pulumi.getter + def message(self) -> Optional[str]: + """ + (Output) + Output only. The diagnostic message. + """ + return pulumi.get(self, "message") + + @property + @pulumi.getter + def position(self) -> Optional['outputs.RuleCompilationDiagnosticPosition']: + """ + CompilationPosition represents the location of a compilation diagnostic in + rule text. + Structure is documented below. + """ + return pulumi.get(self, "position") + + @property + @pulumi.getter + def severity(self) -> Optional[str]: + """ + (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + """ + return pulumi.get(self, "severity") + + @property + @pulumi.getter + def uri(self) -> Optional[str]: + """ + (Output) + Output only. Link to documentation that describes a diagnostic in more detail. + """ + return pulumi.get(self, "uri") + + +@pulumi.output_type +class RuleCompilationDiagnosticPosition(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "endColumn": + suggest = "end_column" + elif key == "endLine": + suggest = "end_line" + elif key == "startColumn": + suggest = "start_column" + elif key == "startLine": + suggest = "start_line" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuleCompilationDiagnosticPosition. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuleCompilationDiagnosticPosition.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuleCompilationDiagnosticPosition.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + end_column: Optional[int] = None, + end_line: Optional[int] = None, + start_column: Optional[int] = None, + start_line: Optional[int] = None): + """ + :param int end_column: (Output) + Output only. End column number, beginning at 1. + :param int end_line: (Output) + Output only. End line number, beginning at 1. + :param int start_column: (Output) + Output only. Start column number, beginning at 1. + :param int start_line: (Output) + Output only. Start line number, beginning at 1. + """ + if end_column is not None: + pulumi.set(__self__, "end_column", end_column) + if end_line is not None: + pulumi.set(__self__, "end_line", end_line) + if start_column is not None: + pulumi.set(__self__, "start_column", start_column) + if start_line is not None: + pulumi.set(__self__, "start_line", start_line) + + @property + @pulumi.getter(name="endColumn") + def end_column(self) -> Optional[int]: + """ + (Output) + Output only. End column number, beginning at 1. + """ + return pulumi.get(self, "end_column") + + @property + @pulumi.getter(name="endLine") + def end_line(self) -> Optional[int]: + """ + (Output) + Output only. End line number, beginning at 1. + """ + return pulumi.get(self, "end_line") + + @property + @pulumi.getter(name="startColumn") + def start_column(self) -> Optional[int]: + """ + (Output) + Output only. Start column number, beginning at 1. + """ + return pulumi.get(self, "start_column") + + @property + @pulumi.getter(name="startLine") + def start_line(self) -> Optional[int]: + """ + (Output) + Output only. Start line number, beginning at 1. + """ + return pulumi.get(self, "start_line") + + +@pulumi.output_type +class RuleSeverity(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "displayName": + suggest = "display_name" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuleSeverity. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuleSeverity.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuleSeverity.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + display_name: Optional[str] = None): + """ + :param str display_name: The display name of the severity level. Extracted from the meta section of + the rule text. + """ + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[str]: + """ + The display name of the severity level. Extracted from the meta section of + the rule text. + """ + return pulumi.get(self, "display_name") + + @pulumi.output_type class WatchlistEntityCount(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/chronicle/reference_list.py b/sdk/python/pulumi_gcp/chronicle/reference_list.py new file mode 100644 index 0000000000..a3d04affe6 --- /dev/null +++ b/sdk/python/pulumi_gcp/chronicle/reference_list.py @@ -0,0 +1,788 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ReferenceListArgs', 'ReferenceList'] + +@pulumi.input_type +class ReferenceListArgs: + def __init__(__self__, *, + description: pulumi.Input[str], + entries: pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]], + instance: pulumi.Input[str], + location: pulumi.Input[str], + reference_list_id: pulumi.Input[str], + syntax_type: pulumi.Input[str], + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ReferenceList resource. + :param pulumi.Input[str] description: Required. A user-provided description of the reference list. + :param pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]] entries: Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] reference_list_id: Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + :param pulumi.Input[str] syntax_type: Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + pulumi.set(__self__, "description", description) + pulumi.set(__self__, "entries", entries) + pulumi.set(__self__, "instance", instance) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "reference_list_id", reference_list_id) + pulumi.set(__self__, "syntax_type", syntax_type) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def description(self) -> pulumi.Input[str]: + """ + Required. A user-provided description of the reference list. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: pulumi.Input[str]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter + def entries(self) -> pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]]: + """ + Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + """ + return pulumi.get(self, "entries") + + @entries.setter + def entries(self, value: pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]]): + pulumi.set(self, "entries", value) + + @property + @pulumi.getter + def instance(self) -> pulumi.Input[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: pulumi.Input[str]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="referenceListId") + def reference_list_id(self) -> pulumi.Input[str]: + """ + Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + """ + return pulumi.get(self, "reference_list_id") + + @reference_list_id.setter + def reference_list_id(self, value: pulumi.Input[str]): + pulumi.set(self, "reference_list_id", value) + + @property + @pulumi.getter(name="syntaxType") + def syntax_type(self) -> pulumi.Input[str]: + """ + Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + return pulumi.get(self, "syntax_type") + + @syntax_type.setter + def syntax_type(self, value: pulumi.Input[str]): + pulumi.set(self, "syntax_type", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _ReferenceListState: + def __init__(__self__, *, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + entries: Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_list_id: Optional[pulumi.Input[str]] = None, + revision_create_time: Optional[pulumi.Input[str]] = None, + rule_associations_count: Optional[pulumi.Input[int]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + scope_infos: Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListScopeInfoArgs']]]] = None, + syntax_type: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ReferenceList resources. + :param pulumi.Input[str] description: Required. A user-provided description of the reference list. + :param pulumi.Input[str] display_name: Output only. The unique display name of the reference list. + :param pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]] entries: Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] name: Output only. The resource name of the reference list. + Format: + projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + :param pulumi.Input[str] reference_list_id: Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + :param pulumi.Input[str] revision_create_time: Output only. The timestamp when the reference list was last updated. + :param pulumi.Input[int] rule_associations_count: Output only. The count of self-authored rules using the reference list. + :param pulumi.Input[Sequence[pulumi.Input[str]]] rules: Output only. The resource names for the associated self-authored Rules that use this + reference list. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + :param pulumi.Input[Sequence[pulumi.Input['ReferenceListScopeInfoArgs']]] scope_infos: ScopeInfo specifies the scope info of the reference list. + Structure is documented below. + :param pulumi.Input[str] syntax_type: Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + if description is not None: + pulumi.set(__self__, "description", description) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if entries is not None: + pulumi.set(__self__, "entries", entries) + if instance is not None: + pulumi.set(__self__, "instance", instance) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if reference_list_id is not None: + pulumi.set(__self__, "reference_list_id", reference_list_id) + if revision_create_time is not None: + pulumi.set(__self__, "revision_create_time", revision_create_time) + if rule_associations_count is not None: + pulumi.set(__self__, "rule_associations_count", rule_associations_count) + if rules is not None: + pulumi.set(__self__, "rules", rules) + if scope_infos is not None: + pulumi.set(__self__, "scope_infos", scope_infos) + if syntax_type is not None: + pulumi.set(__self__, "syntax_type", syntax_type) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + Required. A user-provided description of the reference list. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The unique display name of the reference list. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter + def entries(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]]]: + """ + Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + """ + return pulumi.get(self, "entries") + + @entries.setter + def entries(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListEntryArgs']]]]): + pulumi.set(self, "entries", value) + + @property + @pulumi.getter + def instance(self) -> Optional[pulumi.Input[str]]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The resource name of the reference list. + Format: + projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="referenceListId") + def reference_list_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + """ + return pulumi.get(self, "reference_list_id") + + @reference_list_id.setter + def reference_list_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "reference_list_id", value) + + @property + @pulumi.getter(name="revisionCreateTime") + def revision_create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The timestamp when the reference list was last updated. + """ + return pulumi.get(self, "revision_create_time") + + @revision_create_time.setter + def revision_create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "revision_create_time", value) + + @property + @pulumi.getter(name="ruleAssociationsCount") + def rule_associations_count(self) -> Optional[pulumi.Input[int]]: + """ + Output only. The count of self-authored rules using the reference list. + """ + return pulumi.get(self, "rule_associations_count") + + @rule_associations_count.setter + def rule_associations_count(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "rule_associations_count", value) + + @property + @pulumi.getter + def rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. The resource names for the associated self-authored Rules that use this + reference list. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + """ + return pulumi.get(self, "rules") + + @rules.setter + def rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "rules", value) + + @property + @pulumi.getter(name="scopeInfos") + def scope_infos(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListScopeInfoArgs']]]]: + """ + ScopeInfo specifies the scope info of the reference list. + Structure is documented below. + """ + return pulumi.get(self, "scope_infos") + + @scope_infos.setter + def scope_infos(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ReferenceListScopeInfoArgs']]]]): + pulumi.set(self, "scope_infos", value) + + @property + @pulumi.getter(name="syntaxType") + def syntax_type(self) -> Optional[pulumi.Input[str]]: + """ + Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + return pulumi.get(self, "syntax_type") + + @syntax_type.setter + def syntax_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "syntax_type", value) + + +class ReferenceList(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + entries: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListEntryArgs', 'ReferenceListEntryArgsDict']]]]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_list_id: Optional[pulumi.Input[str]] = None, + syntax_type: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Chronicle Referencelist Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.ReferenceList("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + reference_list_id="reference_list_id", + description="referencelist-description", + entries=[{ + "value": "referencelist-entry-value", + }], + syntax_type="REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING") + ``` + + ## Import + + ReferenceList can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` + + * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` + + * `{{location}}/{{instance}}/{{reference_list_id}}` + + When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] description: Required. A user-provided description of the reference list. + :param pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListEntryArgs', 'ReferenceListEntryArgsDict']]]] entries: Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] reference_list_id: Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + :param pulumi.Input[str] syntax_type: Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ReferenceListArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Chronicle Referencelist Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.ReferenceList("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + reference_list_id="reference_list_id", + description="referencelist-description", + entries=[{ + "value": "referencelist-entry-value", + }], + syntax_type="REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING") + ``` + + ## Import + + ReferenceList can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}}` + + * `{{project}}/{{location}}/{{instance}}/{{reference_list_id}}` + + * `{{location}}/{{instance}}/{{reference_list_id}}` + + When using the `pulumi import` command, ReferenceList can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default projects/{{project}}/locations/{{location}}/instances/{{instance}}/referenceLists/{{reference_list_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{project}}/{{location}}/{{instance}}/{{reference_list_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/referenceList:ReferenceList default {{location}}/{{instance}}/{{reference_list_id}} + ``` + + :param str resource_name: The name of the resource. + :param ReferenceListArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ReferenceListArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + entries: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListEntryArgs', 'ReferenceListEntryArgsDict']]]]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_list_id: Optional[pulumi.Input[str]] = None, + syntax_type: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ReferenceListArgs.__new__(ReferenceListArgs) + + if description is None and not opts.urn: + raise TypeError("Missing required property 'description'") + __props__.__dict__["description"] = description + if entries is None and not opts.urn: + raise TypeError("Missing required property 'entries'") + __props__.__dict__["entries"] = entries + if instance is None and not opts.urn: + raise TypeError("Missing required property 'instance'") + __props__.__dict__["instance"] = instance + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["project"] = project + if reference_list_id is None and not opts.urn: + raise TypeError("Missing required property 'reference_list_id'") + __props__.__dict__["reference_list_id"] = reference_list_id + if syntax_type is None and not opts.urn: + raise TypeError("Missing required property 'syntax_type'") + __props__.__dict__["syntax_type"] = syntax_type + __props__.__dict__["display_name"] = None + __props__.__dict__["name"] = None + __props__.__dict__["revision_create_time"] = None + __props__.__dict__["rule_associations_count"] = None + __props__.__dict__["rules"] = None + __props__.__dict__["scope_infos"] = None + super(ReferenceList, __self__).__init__( + 'gcp:chronicle/referenceList:ReferenceList', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + entries: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListEntryArgs', 'ReferenceListEntryArgsDict']]]]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_list_id: Optional[pulumi.Input[str]] = None, + revision_create_time: Optional[pulumi.Input[str]] = None, + rule_associations_count: Optional[pulumi.Input[int]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + scope_infos: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListScopeInfoArgs', 'ReferenceListScopeInfoArgsDict']]]]] = None, + syntax_type: Optional[pulumi.Input[str]] = None) -> 'ReferenceList': + """ + Get an existing ReferenceList resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] description: Required. A user-provided description of the reference list. + :param pulumi.Input[str] display_name: Output only. The unique display name of the reference list. + :param pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListEntryArgs', 'ReferenceListEntryArgsDict']]]] entries: Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] name: Output only. The resource name of the reference list. + Format: + projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + :param pulumi.Input[str] reference_list_id: Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + :param pulumi.Input[str] revision_create_time: Output only. The timestamp when the reference list was last updated. + :param pulumi.Input[int] rule_associations_count: Output only. The count of self-authored rules using the reference list. + :param pulumi.Input[Sequence[pulumi.Input[str]]] rules: Output only. The resource names for the associated self-authored Rules that use this + reference list. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + :param pulumi.Input[Sequence[pulumi.Input[Union['ReferenceListScopeInfoArgs', 'ReferenceListScopeInfoArgsDict']]]] scope_infos: ScopeInfo specifies the scope info of the reference list. + Structure is documented below. + :param pulumi.Input[str] syntax_type: Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ReferenceListState.__new__(_ReferenceListState) + + __props__.__dict__["description"] = description + __props__.__dict__["display_name"] = display_name + __props__.__dict__["entries"] = entries + __props__.__dict__["instance"] = instance + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["reference_list_id"] = reference_list_id + __props__.__dict__["revision_create_time"] = revision_create_time + __props__.__dict__["rule_associations_count"] = rule_associations_count + __props__.__dict__["rules"] = rules + __props__.__dict__["scope_infos"] = scope_infos + __props__.__dict__["syntax_type"] = syntax_type + return ReferenceList(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def description(self) -> pulumi.Output[str]: + """ + Required. A user-provided description of the reference list. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[str]: + """ + Output only. The unique display name of the reference list. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter + def entries(self) -> pulumi.Output[Sequence['outputs.ReferenceListEntry']]: + """ + Required. The entries of the reference list. + When listed, they are returned in the order that was specified at creation + or update. The combined size of the values of the reference list may not + exceed 6MB. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + Structure is documented below. + """ + return pulumi.get(self, "entries") + + @property + @pulumi.getter + def instance(self) -> pulumi.Output[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Output only. The resource name of the reference list. + Format: + projects/{project}/locations/{location}/instances/{instance}/referenceLists/{reference_list} + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="referenceListId") + def reference_list_id(self) -> pulumi.Output[str]: + """ + Required. The ID to use for the reference list. This is also the display name for + the reference list. It must satisfy the following requirements: + - Starts with letter. + - Contains only letters, numbers and underscore. + - Has length < 256. + - Must be unique. + """ + return pulumi.get(self, "reference_list_id") + + @property + @pulumi.getter(name="revisionCreateTime") + def revision_create_time(self) -> pulumi.Output[str]: + """ + Output only. The timestamp when the reference list was last updated. + """ + return pulumi.get(self, "revision_create_time") + + @property + @pulumi.getter(name="ruleAssociationsCount") + def rule_associations_count(self) -> pulumi.Output[int]: + """ + Output only. The count of self-authored rules using the reference list. + """ + return pulumi.get(self, "rule_associations_count") + + @property + @pulumi.getter + def rules(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. The resource names for the associated self-authored Rules that use this + reference list. + This is returned only when the view is REFERENCE_LIST_VIEW_FULL. + """ + return pulumi.get(self, "rules") + + @property + @pulumi.getter(name="scopeInfos") + def scope_infos(self) -> pulumi.Output[Sequence['outputs.ReferenceListScopeInfo']]: + """ + ScopeInfo specifies the scope info of the reference list. + Structure is documented below. + """ + return pulumi.get(self, "scope_infos") + + @property + @pulumi.getter(name="syntaxType") + def syntax_type(self) -> pulumi.Output[str]: + """ + Possible values: + REFERENCE_LIST_SYNTAX_TYPE_PLAIN_TEXT_STRING + REFERENCE_LIST_SYNTAX_TYPE_REGEX + REFERENCE_LIST_SYNTAX_TYPE_CIDR + """ + return pulumi.get(self, "syntax_type") + diff --git a/sdk/python/pulumi_gcp/chronicle/rule.py b/sdk/python/pulumi_gcp/chronicle/rule.py new file mode 100644 index 0000000000..c52ed51b13 --- /dev/null +++ b/sdk/python/pulumi_gcp/chronicle/rule.py @@ -0,0 +1,1308 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RuleArgs', 'Rule'] + +@pulumi.input_type +class RuleArgs: + def __init__(__self__, *, + instance: pulumi.Input[str], + location: pulumi.Input[str], + deletion_policy: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + rule_id: Optional[pulumi.Input[str]] = None, + scope: Optional[pulumi.Input[str]] = None, + text: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Rule resource. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] deletion_policy: Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + :param pulumi.Input[str] etag: The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] rule_id: Rule Id is the ID of the Rule. + :param pulumi.Input[str] scope: Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + :param pulumi.Input[str] text: The YARA-L content of the rule. + Populated in FULL view. + """ + pulumi.set(__self__, "instance", instance) + pulumi.set(__self__, "location", location) + if deletion_policy is not None: + pulumi.set(__self__, "deletion_policy", deletion_policy) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if project is not None: + pulumi.set(__self__, "project", project) + if rule_id is not None: + pulumi.set(__self__, "rule_id", rule_id) + if scope is not None: + pulumi.set(__self__, "scope", scope) + if text is not None: + pulumi.set(__self__, "text", text) + + @property + @pulumi.getter + def instance(self) -> pulumi.Input[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: pulumi.Input[str]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> Optional[pulumi.Input[str]]: + """ + Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + """ + return pulumi.get(self, "deletion_policy") + + @deletion_policy.setter + def deletion_policy(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "deletion_policy", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="ruleId") + def rule_id(self) -> Optional[pulumi.Input[str]]: + """ + Rule Id is the ID of the Rule. + """ + return pulumi.get(self, "rule_id") + + @rule_id.setter + def rule_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "rule_id", value) + + @property + @pulumi.getter + def scope(self) -> Optional[pulumi.Input[str]]: + """ + Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + """ + return pulumi.get(self, "scope") + + @scope.setter + def scope(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "scope", value) + + @property + @pulumi.getter + def text(self) -> Optional[pulumi.Input[str]]: + """ + The YARA-L content of the rule. + Populated in FULL view. + """ + return pulumi.get(self, "text") + + @text.setter + def text(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "text", value) + + +@pulumi.input_type +class _RuleState: + def __init__(__self__, *, + allowed_run_frequencies: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + author: Optional[pulumi.Input[str]] = None, + compilation_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input['RuleCompilationDiagnosticArgs']]]] = None, + compilation_state: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + data_tables: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + near_real_time_live_rule_eligible: Optional[pulumi.Input[bool]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_lists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + revision_create_time: Optional[pulumi.Input[str]] = None, + revision_id: Optional[pulumi.Input[str]] = None, + rule_id: Optional[pulumi.Input[str]] = None, + scope: Optional[pulumi.Input[str]] = None, + severities: Optional[pulumi.Input[Sequence[pulumi.Input['RuleSeverityArgs']]]] = None, + text: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Rule resources. + :param pulumi.Input[Sequence[pulumi.Input[str]]] allowed_run_frequencies: Output only. The run frequencies that are allowed for the rule. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] author: Output only. The author of the rule. Extracted from the meta section of text. + Populated in BASIC view and FULL view. + :param pulumi.Input[Sequence[pulumi.Input['RuleCompilationDiagnosticArgs']]] compilation_diagnostics: Output only. A list of a rule's corresponding compilation diagnostic messages + such as compilation errors and compilation warnings. + Populated in FULL view. + Structure is documented below. + :param pulumi.Input[str] compilation_state: Output only. The current compilation state of the rule. + Populated in FULL view. + Possible values: + COMPILATION_STATE_UNSPECIFIED + SUCCEEDED + FAILED + :param pulumi.Input[str] create_time: Output only. The timestamp of when the rule was created. + Populated in FULL view. + :param pulumi.Input[Sequence[pulumi.Input[str]]] data_tables: Output only. Resource names of the data tables used in this rule. + :param pulumi.Input[str] deletion_policy: Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + :param pulumi.Input[str] display_name: The display name of the severity level. Extracted from the meta section of + the rule text. + :param pulumi.Input[str] etag: The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] metadata: Output only. Additional metadata specified in the meta section of text. + Populated in FULL view. + :param pulumi.Input[str] name: Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[bool] near_real_time_live_rule_eligible: Output only. Indicate the rule can run in near real time live rule. + If this is true, the rule uses the near real time live rule when the run + frequency is set to LIVE. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Sequence[pulumi.Input[str]]] reference_lists: Output only. Resource names of the reference lists used in this rule. + Populated in FULL view. + :param pulumi.Input[str] revision_create_time: Output only. The timestamp of when the rule revision was created. + Populated in FULL, REVISION_METADATA_ONLY views. + :param pulumi.Input[str] revision_id: Output only. The revision ID of the rule. + A new revision is created whenever the rule text is changed in any way. + Format: v_{10 digits}_{9 digits} + Populated in REVISION_METADATA_ONLY view and FULL view. + :param pulumi.Input[str] rule_id: Rule Id is the ID of the Rule. + :param pulumi.Input[str] scope: Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + :param pulumi.Input[Sequence[pulumi.Input['RuleSeverityArgs']]] severities: (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + :param pulumi.Input[str] text: The YARA-L content of the rule. + Populated in FULL view. + :param pulumi.Input[str] type: Possible values: + RULE_TYPE_UNSPECIFIED + SINGLE_EVENT + MULTI_EVENT + """ + if allowed_run_frequencies is not None: + pulumi.set(__self__, "allowed_run_frequencies", allowed_run_frequencies) + if author is not None: + pulumi.set(__self__, "author", author) + if compilation_diagnostics is not None: + pulumi.set(__self__, "compilation_diagnostics", compilation_diagnostics) + if compilation_state is not None: + pulumi.set(__self__, "compilation_state", compilation_state) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if data_tables is not None: + pulumi.set(__self__, "data_tables", data_tables) + if deletion_policy is not None: + pulumi.set(__self__, "deletion_policy", deletion_policy) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if instance is not None: + pulumi.set(__self__, "instance", instance) + if location is not None: + pulumi.set(__self__, "location", location) + if metadata is not None: + pulumi.set(__self__, "metadata", metadata) + if name is not None: + pulumi.set(__self__, "name", name) + if near_real_time_live_rule_eligible is not None: + pulumi.set(__self__, "near_real_time_live_rule_eligible", near_real_time_live_rule_eligible) + if project is not None: + pulumi.set(__self__, "project", project) + if reference_lists is not None: + pulumi.set(__self__, "reference_lists", reference_lists) + if revision_create_time is not None: + pulumi.set(__self__, "revision_create_time", revision_create_time) + if revision_id is not None: + pulumi.set(__self__, "revision_id", revision_id) + if rule_id is not None: + pulumi.set(__self__, "rule_id", rule_id) + if scope is not None: + pulumi.set(__self__, "scope", scope) + if severities is not None: + pulumi.set(__self__, "severities", severities) + if text is not None: + pulumi.set(__self__, "text", text) + if type is not None: + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter(name="allowedRunFrequencies") + def allowed_run_frequencies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. The run frequencies that are allowed for the rule. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "allowed_run_frequencies") + + @allowed_run_frequencies.setter + def allowed_run_frequencies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "allowed_run_frequencies", value) + + @property + @pulumi.getter + def author(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The author of the rule. Extracted from the meta section of text. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "author") + + @author.setter + def author(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "author", value) + + @property + @pulumi.getter(name="compilationDiagnostics") + def compilation_diagnostics(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RuleCompilationDiagnosticArgs']]]]: + """ + Output only. A list of a rule's corresponding compilation diagnostic messages + such as compilation errors and compilation warnings. + Populated in FULL view. + Structure is documented below. + """ + return pulumi.get(self, "compilation_diagnostics") + + @compilation_diagnostics.setter + def compilation_diagnostics(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RuleCompilationDiagnosticArgs']]]]): + pulumi.set(self, "compilation_diagnostics", value) + + @property + @pulumi.getter(name="compilationState") + def compilation_state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The current compilation state of the rule. + Populated in FULL view. + Possible values: + COMPILATION_STATE_UNSPECIFIED + SUCCEEDED + FAILED + """ + return pulumi.get(self, "compilation_state") + + @compilation_state.setter + def compilation_state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "compilation_state", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The timestamp of when the rule was created. + Populated in FULL view. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="dataTables") + def data_tables(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. Resource names of the data tables used in this rule. + """ + return pulumi.get(self, "data_tables") + + @data_tables.setter + def data_tables(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "data_tables", value) + + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> Optional[pulumi.Input[str]]: + """ + Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + """ + return pulumi.get(self, "deletion_policy") + + @deletion_policy.setter + def deletion_policy(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "deletion_policy", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The display name of the severity level. Extracted from the meta section of + the rule text. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def instance(self) -> Optional[pulumi.Input[str]]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Output only. Additional metadata specified in the meta section of text. + Populated in FULL view. + """ + return pulumi.get(self, "metadata") + + @metadata.setter + def metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "metadata", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="nearRealTimeLiveRuleEligible") + def near_real_time_live_rule_eligible(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Indicate the rule can run in near real time live rule. + If this is true, the rule uses the near real time live rule when the run + frequency is set to LIVE. + """ + return pulumi.get(self, "near_real_time_live_rule_eligible") + + @near_real_time_live_rule_eligible.setter + def near_real_time_live_rule_eligible(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "near_real_time_live_rule_eligible", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="referenceLists") + def reference_lists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. Resource names of the reference lists used in this rule. + Populated in FULL view. + """ + return pulumi.get(self, "reference_lists") + + @reference_lists.setter + def reference_lists(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "reference_lists", value) + + @property + @pulumi.getter(name="revisionCreateTime") + def revision_create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The timestamp of when the rule revision was created. + Populated in FULL, REVISION_METADATA_ONLY views. + """ + return pulumi.get(self, "revision_create_time") + + @revision_create_time.setter + def revision_create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "revision_create_time", value) + + @property + @pulumi.getter(name="revisionId") + def revision_id(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The revision ID of the rule. + A new revision is created whenever the rule text is changed in any way. + Format: v_{10 digits}_{9 digits} + Populated in REVISION_METADATA_ONLY view and FULL view. + """ + return pulumi.get(self, "revision_id") + + @revision_id.setter + def revision_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "revision_id", value) + + @property + @pulumi.getter(name="ruleId") + def rule_id(self) -> Optional[pulumi.Input[str]]: + """ + Rule Id is the ID of the Rule. + """ + return pulumi.get(self, "rule_id") + + @rule_id.setter + def rule_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "rule_id", value) + + @property + @pulumi.getter + def scope(self) -> Optional[pulumi.Input[str]]: + """ + Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + """ + return pulumi.get(self, "scope") + + @scope.setter + def scope(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "scope", value) + + @property + @pulumi.getter + def severities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RuleSeverityArgs']]]]: + """ + (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + """ + return pulumi.get(self, "severities") + + @severities.setter + def severities(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RuleSeverityArgs']]]]): + pulumi.set(self, "severities", value) + + @property + @pulumi.getter + def text(self) -> Optional[pulumi.Input[str]]: + """ + The YARA-L content of the rule. + Populated in FULL view. + """ + return pulumi.get(self, "text") + + @text.setter + def text(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "text", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + Possible values: + RULE_TYPE_UNSPECIFIED + SINGLE_EVENT + MULTI_EVENT + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + +class Rule(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + rule_id: Optional[pulumi.Input[str]] = None, + scope: Optional[pulumi.Input[str]] = None, + text: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Chronicle Rule Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + deletion_policy="DEFAULT", + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + ### Chronicle Rule With Force Deletion + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + deletion_policy="FORCE", + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + ### Chronicle Rule With Data Access Scope + + ```python + import pulumi + import pulumi_gcp as gcp + + data_access_scope_test = gcp.chronicle.DataAccessScope("data_access_scope_test", + location="us", + instance="00000000-0000-0000-0000-000000000000", + data_access_scope_id="scope-name", + description="scope-description", + allowed_data_access_labels=[{ + "log_type": "GCP_CLOUDAUDIT", + }]) + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + scope=google_chronicle_data_access_scope["dataAccessScopeTest"]["name"], + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + + ## Import + + Rule can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` + + * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` + + * `{{location}}/{{instance}}/{{rule_id}}` + + When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] deletion_policy: Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + :param pulumi.Input[str] etag: The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] rule_id: Rule Id is the ID of the Rule. + :param pulumi.Input[str] scope: Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + :param pulumi.Input[str] text: The YARA-L content of the rule. + Populated in FULL view. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RuleArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Chronicle Rule Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + deletion_policy="DEFAULT", + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + ### Chronicle Rule With Force Deletion + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + deletion_policy="FORCE", + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + ### Chronicle Rule With Data Access Scope + + ```python + import pulumi + import pulumi_gcp as gcp + + data_access_scope_test = gcp.chronicle.DataAccessScope("data_access_scope_test", + location="us", + instance="00000000-0000-0000-0000-000000000000", + data_access_scope_id="scope-name", + description="scope-description", + allowed_data_access_labels=[{ + "log_type": "GCP_CLOUDAUDIT", + }]) + example = gcp.chronicle.Rule("example", + location="us", + instance="00000000-0000-0000-0000-000000000000", + scope=google_chronicle_data_access_scope["dataAccessScopeTest"]["name"], + text="rule test_rule { meta: events: $userid = $e.principal.user.userid match: $userid over 10m condition: $e }\\n") + ``` + + ## Import + + Rule can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}}` + + * `{{project}}/{{location}}/{{instance}}/{{rule_id}}` + + * `{{location}}/{{instance}}/{{rule_id}}` + + When using the `pulumi import` command, Rule can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default {{project}}/{{location}}/{{instance}}/{{rule_id}} + ``` + + ```sh + $ pulumi import gcp:chronicle/rule:Rule default {{location}}/{{instance}}/{{rule_id}} + ``` + + :param str resource_name: The name of the resource. + :param RuleArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RuleArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + rule_id: Optional[pulumi.Input[str]] = None, + scope: Optional[pulumi.Input[str]] = None, + text: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RuleArgs.__new__(RuleArgs) + + __props__.__dict__["deletion_policy"] = deletion_policy + __props__.__dict__["etag"] = etag + if instance is None and not opts.urn: + raise TypeError("Missing required property 'instance'") + __props__.__dict__["instance"] = instance + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["project"] = project + __props__.__dict__["rule_id"] = rule_id + __props__.__dict__["scope"] = scope + __props__.__dict__["text"] = text + __props__.__dict__["allowed_run_frequencies"] = None + __props__.__dict__["author"] = None + __props__.__dict__["compilation_diagnostics"] = None + __props__.__dict__["compilation_state"] = None + __props__.__dict__["create_time"] = None + __props__.__dict__["data_tables"] = None + __props__.__dict__["display_name"] = None + __props__.__dict__["metadata"] = None + __props__.__dict__["name"] = None + __props__.__dict__["near_real_time_live_rule_eligible"] = None + __props__.__dict__["reference_lists"] = None + __props__.__dict__["revision_create_time"] = None + __props__.__dict__["revision_id"] = None + __props__.__dict__["severities"] = None + __props__.__dict__["type"] = None + super(Rule, __self__).__init__( + 'gcp:chronicle/rule:Rule', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + allowed_run_frequencies: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + author: Optional[pulumi.Input[str]] = None, + compilation_diagnostics: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RuleCompilationDiagnosticArgs', 'RuleCompilationDiagnosticArgsDict']]]]] = None, + compilation_state: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + data_tables: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + near_real_time_live_rule_eligible: Optional[pulumi.Input[bool]] = None, + project: Optional[pulumi.Input[str]] = None, + reference_lists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + revision_create_time: Optional[pulumi.Input[str]] = None, + revision_id: Optional[pulumi.Input[str]] = None, + rule_id: Optional[pulumi.Input[str]] = None, + scope: Optional[pulumi.Input[str]] = None, + severities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RuleSeverityArgs', 'RuleSeverityArgsDict']]]]] = None, + text: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None) -> 'Rule': + """ + Get an existing Rule resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] allowed_run_frequencies: Output only. The run frequencies that are allowed for the rule. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] author: Output only. The author of the rule. Extracted from the meta section of text. + Populated in BASIC view and FULL view. + :param pulumi.Input[Sequence[pulumi.Input[Union['RuleCompilationDiagnosticArgs', 'RuleCompilationDiagnosticArgsDict']]]] compilation_diagnostics: Output only. A list of a rule's corresponding compilation diagnostic messages + such as compilation errors and compilation warnings. + Populated in FULL view. + Structure is documented below. + :param pulumi.Input[str] compilation_state: Output only. The current compilation state of the rule. + Populated in FULL view. + Possible values: + COMPILATION_STATE_UNSPECIFIED + SUCCEEDED + FAILED + :param pulumi.Input[str] create_time: Output only. The timestamp of when the rule was created. + Populated in FULL view. + :param pulumi.Input[Sequence[pulumi.Input[str]]] data_tables: Output only. Resource names of the data tables used in this rule. + :param pulumi.Input[str] deletion_policy: Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + :param pulumi.Input[str] display_name: The display name of the severity level. Extracted from the meta section of + the rule text. + :param pulumi.Input[str] etag: The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] metadata: Output only. Additional metadata specified in the meta section of text. + Populated in FULL view. + :param pulumi.Input[str] name: Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[bool] near_real_time_live_rule_eligible: Output only. Indicate the rule can run in near real time live rule. + If this is true, the rule uses the near real time live rule when the run + frequency is set to LIVE. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Sequence[pulumi.Input[str]]] reference_lists: Output only. Resource names of the reference lists used in this rule. + Populated in FULL view. + :param pulumi.Input[str] revision_create_time: Output only. The timestamp of when the rule revision was created. + Populated in FULL, REVISION_METADATA_ONLY views. + :param pulumi.Input[str] revision_id: Output only. The revision ID of the rule. + A new revision is created whenever the rule text is changed in any way. + Format: v_{10 digits}_{9 digits} + Populated in REVISION_METADATA_ONLY view and FULL view. + :param pulumi.Input[str] rule_id: Rule Id is the ID of the Rule. + :param pulumi.Input[str] scope: Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + :param pulumi.Input[Sequence[pulumi.Input[Union['RuleSeverityArgs', 'RuleSeverityArgsDict']]]] severities: (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + :param pulumi.Input[str] text: The YARA-L content of the rule. + Populated in FULL view. + :param pulumi.Input[str] type: Possible values: + RULE_TYPE_UNSPECIFIED + SINGLE_EVENT + MULTI_EVENT + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RuleState.__new__(_RuleState) + + __props__.__dict__["allowed_run_frequencies"] = allowed_run_frequencies + __props__.__dict__["author"] = author + __props__.__dict__["compilation_diagnostics"] = compilation_diagnostics + __props__.__dict__["compilation_state"] = compilation_state + __props__.__dict__["create_time"] = create_time + __props__.__dict__["data_tables"] = data_tables + __props__.__dict__["deletion_policy"] = deletion_policy + __props__.__dict__["display_name"] = display_name + __props__.__dict__["etag"] = etag + __props__.__dict__["instance"] = instance + __props__.__dict__["location"] = location + __props__.__dict__["metadata"] = metadata + __props__.__dict__["name"] = name + __props__.__dict__["near_real_time_live_rule_eligible"] = near_real_time_live_rule_eligible + __props__.__dict__["project"] = project + __props__.__dict__["reference_lists"] = reference_lists + __props__.__dict__["revision_create_time"] = revision_create_time + __props__.__dict__["revision_id"] = revision_id + __props__.__dict__["rule_id"] = rule_id + __props__.__dict__["scope"] = scope + __props__.__dict__["severities"] = severities + __props__.__dict__["text"] = text + __props__.__dict__["type"] = type + return Rule(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="allowedRunFrequencies") + def allowed_run_frequencies(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. The run frequencies that are allowed for the rule. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "allowed_run_frequencies") + + @property + @pulumi.getter + def author(self) -> pulumi.Output[str]: + """ + Output only. The author of the rule. Extracted from the meta section of text. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "author") + + @property + @pulumi.getter(name="compilationDiagnostics") + def compilation_diagnostics(self) -> pulumi.Output[Sequence['outputs.RuleCompilationDiagnostic']]: + """ + Output only. A list of a rule's corresponding compilation diagnostic messages + such as compilation errors and compilation warnings. + Populated in FULL view. + Structure is documented below. + """ + return pulumi.get(self, "compilation_diagnostics") + + @property + @pulumi.getter(name="compilationState") + def compilation_state(self) -> pulumi.Output[str]: + """ + Output only. The current compilation state of the rule. + Populated in FULL view. + Possible values: + COMPILATION_STATE_UNSPECIFIED + SUCCEEDED + FAILED + """ + return pulumi.get(self, "compilation_state") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. The timestamp of when the rule was created. + Populated in FULL view. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="dataTables") + def data_tables(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. Resource names of the data tables used in this rule. + """ + return pulumi.get(self, "data_tables") + + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> pulumi.Output[Optional[str]]: + """ + Policy to determine if the rule should be deleted forcefully. + If deletion_policy = "FORCE", any retrohunts and any detections associated with the rule + will also be deleted. If deletion_policy = "DEFAULT", the call will only succeed if the + rule has no associated retrohunts, including completed retrohunts, and no + associated detections. Regardless of this field's value, the rule + deployment associated with this rule will also be deleted. + Possible values: DEFAULT, FORCE + """ + return pulumi.get(self, "deletion_policy") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[str]: + """ + The display name of the severity level. Extracted from the meta section of + the rule text. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + The etag for this rule. + If this is provided on update, the request will succeed if and only if it + matches the server-computed value, and will fail with an ABORTED error + otherwise. + Populated in BASIC view and FULL view. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def instance(self) -> pulumi.Output[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + + + - - - + """ + return pulumi.get(self, "instance") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def metadata(self) -> pulumi.Output[Mapping[str, str]]: + """ + Output only. Additional metadata specified in the meta section of text. + Populated in FULL view. + """ + return pulumi.get(self, "metadata") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Full resource name for the rule. This unique identifier is generated using values provided for the URL parameters. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="nearRealTimeLiveRuleEligible") + def near_real_time_live_rule_eligible(self) -> pulumi.Output[bool]: + """ + Output only. Indicate the rule can run in near real time live rule. + If this is true, the rule uses the near real time live rule when the run + frequency is set to LIVE. + """ + return pulumi.get(self, "near_real_time_live_rule_eligible") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="referenceLists") + def reference_lists(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. Resource names of the reference lists used in this rule. + Populated in FULL view. + """ + return pulumi.get(self, "reference_lists") + + @property + @pulumi.getter(name="revisionCreateTime") + def revision_create_time(self) -> pulumi.Output[str]: + """ + Output only. The timestamp of when the rule revision was created. + Populated in FULL, REVISION_METADATA_ONLY views. + """ + return pulumi.get(self, "revision_create_time") + + @property + @pulumi.getter(name="revisionId") + def revision_id(self) -> pulumi.Output[str]: + """ + Output only. The revision ID of the rule. + A new revision is created whenever the rule text is changed in any way. + Format: v_{10 digits}_{9 digits} + Populated in REVISION_METADATA_ONLY view and FULL view. + """ + return pulumi.get(self, "revision_id") + + @property + @pulumi.getter(name="ruleId") + def rule_id(self) -> pulumi.Output[str]: + """ + Rule Id is the ID of the Rule. + """ + return pulumi.get(self, "rule_id") + + @property + @pulumi.getter + def scope(self) -> pulumi.Output[Optional[str]]: + """ + Resource name of the DataAccessScope bound to this rule. + Populated in BASIC view and FULL view. + If reference lists are used in the rule, validations will be performed + against this scope to ensure that the reference lists are compatible with + both the user's and the rule's scopes. + The scope should be in the format: + "projects/{project}/locations/{location}/instances/{instance}/dataAccessScopes/{scope}". + """ + return pulumi.get(self, "scope") + + @property + @pulumi.getter + def severities(self) -> pulumi.Output[Sequence['outputs.RuleSeverity']]: + """ + (Output) + Output only. The severity of a rule's compilation diagnostic. + Possible values: + SEVERITY_UNSPECIFIED + WARNING + ERROR + """ + return pulumi.get(self, "severities") + + @property + @pulumi.getter + def text(self) -> pulumi.Output[Optional[str]]: + """ + The YARA-L content of the rule. + Populated in FULL view. + """ + return pulumi.get(self, "text") + + @property + @pulumi.getter + def type(self) -> pulumi.Output[str]: + """ + Possible values: + RULE_TYPE_UNSPECIFIED + SINGLE_EVENT + MULTI_EVENT + """ + return pulumi.get(self, "type") + diff --git a/sdk/python/pulumi_gcp/chronicle/rule_deployment.py b/sdk/python/pulumi_gcp/chronicle/rule_deployment.py new file mode 100644 index 0000000000..50453c7d1d --- /dev/null +++ b/sdk/python/pulumi_gcp/chronicle/rule_deployment.py @@ -0,0 +1,849 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['RuleDeploymentArgs', 'RuleDeployment'] + +@pulumi.input_type +class RuleDeploymentArgs: + def __init__(__self__, *, + instance: pulumi.Input[str], + location: pulumi.Input[str], + rule: pulumi.Input[str], + alerting: Optional[pulumi.Input[bool]] = None, + archived: Optional[pulumi.Input[bool]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + project: Optional[pulumi.Input[str]] = None, + run_frequency: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RuleDeployment resource. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] rule: The Rule ID of the rule. + + + - - - + :param pulumi.Input[bool] alerting: Whether detections resulting from this deployment should be considered + alerts. + :param pulumi.Input[bool] archived: The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + :param pulumi.Input[bool] enabled: Whether the rule is currently deployed continuously against incoming data. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] run_frequency: The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + pulumi.set(__self__, "instance", instance) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "rule", rule) + if alerting is not None: + pulumi.set(__self__, "alerting", alerting) + if archived is not None: + pulumi.set(__self__, "archived", archived) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if project is not None: + pulumi.set(__self__, "project", project) + if run_frequency is not None: + pulumi.set(__self__, "run_frequency", run_frequency) + + @property + @pulumi.getter + def instance(self) -> pulumi.Input[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: pulumi.Input[str]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def rule(self) -> pulumi.Input[str]: + """ + The Rule ID of the rule. + + + - - - + """ + return pulumi.get(self, "rule") + + @rule.setter + def rule(self, value: pulumi.Input[str]): + pulumi.set(self, "rule", value) + + @property + @pulumi.getter + def alerting(self) -> Optional[pulumi.Input[bool]]: + """ + Whether detections resulting from this deployment should be considered + alerts. + """ + return pulumi.get(self, "alerting") + + @alerting.setter + def alerting(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "alerting", value) + + @property + @pulumi.getter + def archived(self) -> Optional[pulumi.Input[bool]]: + """ + The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + """ + return pulumi.get(self, "archived") + + @archived.setter + def archived(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "archived", value) + + @property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Whether the rule is currently deployed continuously against incoming data. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enabled", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="runFrequency") + def run_frequency(self) -> Optional[pulumi.Input[str]]: + """ + The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + return pulumi.get(self, "run_frequency") + + @run_frequency.setter + def run_frequency(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "run_frequency", value) + + +@pulumi.input_type +class _RuleDeploymentState: + def __init__(__self__, *, + alerting: Optional[pulumi.Input[bool]] = None, + archive_time: Optional[pulumi.Input[str]] = None, + archived: Optional[pulumi.Input[bool]] = None, + consumer_rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + execution_state: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + last_alert_status_change_time: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + producer_rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + rule: Optional[pulumi.Input[str]] = None, + run_frequency: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RuleDeployment resources. + :param pulumi.Input[bool] alerting: Whether detections resulting from this deployment should be considered + alerts. + :param pulumi.Input[str] archive_time: Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + :param pulumi.Input[bool] archived: The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + :param pulumi.Input[Sequence[pulumi.Input[str]]] consumer_rules: Output only. The names of the associated/chained consumer rules. Rules are considered + consumers of this rule if their rule text explicitly filters on this rule's ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[bool] enabled: Whether the rule is currently deployed continuously against incoming data. + :param pulumi.Input[str] execution_state: The execution state of the rule deployment. + Possible values: + DEFAULT + LIMITED + PAUSED + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] last_alert_status_change_time: Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] name: The resource name of the rule deployment. + Note that RuleDeployment is a child of the overall Rule, not any individual + revision, so the resource ID segment for the Rule resource must not + reference a specific revision. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + :param pulumi.Input[Sequence[pulumi.Input[str]]] producer_rules: Output only. The names of the associated/chained producer rules. Rules are considered + producers for this rule if this rule explicitly filters on their ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] rule: The Rule ID of the rule. + + + - - - + :param pulumi.Input[str] run_frequency: The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + if alerting is not None: + pulumi.set(__self__, "alerting", alerting) + if archive_time is not None: + pulumi.set(__self__, "archive_time", archive_time) + if archived is not None: + pulumi.set(__self__, "archived", archived) + if consumer_rules is not None: + pulumi.set(__self__, "consumer_rules", consumer_rules) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if execution_state is not None: + pulumi.set(__self__, "execution_state", execution_state) + if instance is not None: + pulumi.set(__self__, "instance", instance) + if last_alert_status_change_time is not None: + pulumi.set(__self__, "last_alert_status_change_time", last_alert_status_change_time) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if producer_rules is not None: + pulumi.set(__self__, "producer_rules", producer_rules) + if project is not None: + pulumi.set(__self__, "project", project) + if rule is not None: + pulumi.set(__self__, "rule", rule) + if run_frequency is not None: + pulumi.set(__self__, "run_frequency", run_frequency) + + @property + @pulumi.getter + def alerting(self) -> Optional[pulumi.Input[bool]]: + """ + Whether detections resulting from this deployment should be considered + alerts. + """ + return pulumi.get(self, "alerting") + + @alerting.setter + def alerting(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "alerting", value) + + @property + @pulumi.getter(name="archiveTime") + def archive_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + """ + return pulumi.get(self, "archive_time") + + @archive_time.setter + def archive_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "archive_time", value) + + @property + @pulumi.getter + def archived(self) -> Optional[pulumi.Input[bool]]: + """ + The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + """ + return pulumi.get(self, "archived") + + @archived.setter + def archived(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "archived", value) + + @property + @pulumi.getter(name="consumerRules") + def consumer_rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. The names of the associated/chained consumer rules. Rules are considered + consumers of this rule if their rule text explicitly filters on this rule's ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "consumer_rules") + + @consumer_rules.setter + def consumer_rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "consumer_rules", value) + + @property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Whether the rule is currently deployed continuously against incoming data. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enabled", value) + + @property + @pulumi.getter(name="executionState") + def execution_state(self) -> Optional[pulumi.Input[str]]: + """ + The execution state of the rule deployment. + Possible values: + DEFAULT + LIMITED + PAUSED + """ + return pulumi.get(self, "execution_state") + + @execution_state.setter + def execution_state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "execution_state", value) + + @property + @pulumi.getter + def instance(self) -> Optional[pulumi.Input[str]]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @instance.setter + def instance(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "instance", value) + + @property + @pulumi.getter(name="lastAlertStatusChangeTime") + def last_alert_status_change_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + """ + return pulumi.get(self, "last_alert_status_change_time") + + @last_alert_status_change_time.setter + def last_alert_status_change_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "last_alert_status_change_time", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the rule deployment. + Note that RuleDeployment is a child of the overall Rule, not any individual + revision, so the resource ID segment for the Rule resource must not + reference a specific revision. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="producerRules") + def producer_rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Output only. The names of the associated/chained producer rules. Rules are considered + producers for this rule if this rule explicitly filters on their ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "producer_rules") + + @producer_rules.setter + def producer_rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "producer_rules", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def rule(self) -> Optional[pulumi.Input[str]]: + """ + The Rule ID of the rule. + + + - - - + """ + return pulumi.get(self, "rule") + + @rule.setter + def rule(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "rule", value) + + @property + @pulumi.getter(name="runFrequency") + def run_frequency(self) -> Optional[pulumi.Input[str]]: + """ + The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + return pulumi.get(self, "run_frequency") + + @run_frequency.setter + def run_frequency(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "run_frequency", value) + + +class RuleDeployment(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + alerting: Optional[pulumi.Input[bool]] = None, + archived: Optional[pulumi.Input[bool]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + rule: Optional[pulumi.Input[str]] = None, + run_frequency: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ## Import + + RuleDeployment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` + + * `{{project}}/{{location}}/{{instance}}/{{rule}}` + + * `{{location}}/{{instance}}/{{rule}}` + + When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment + ``` + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} + ``` + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] alerting: Whether detections resulting from this deployment should be considered + alerts. + :param pulumi.Input[bool] archived: The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + :param pulumi.Input[bool] enabled: Whether the rule is currently deployed continuously against incoming data. + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] rule: The Rule ID of the rule. + + + - - - + :param pulumi.Input[str] run_frequency: The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RuleDeploymentArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ## Import + + RuleDeployment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment` + + * `{{project}}/{{location}}/{{instance}}/{{rule}}` + + * `{{location}}/{{instance}}/{{rule}}` + + When using the `pulumi import` command, RuleDeployment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default projects/{{project}}/locations/{{location}}/instances/{{instance}}/rules/{{rule}}/deployment + ``` + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{project}}/{{location}}/{{instance}}/{{rule}} + ``` + + ```sh + $ pulumi import gcp:chronicle/ruleDeployment:RuleDeployment default {{location}}/{{instance}}/{{rule}} + ``` + + :param str resource_name: The name of the resource. + :param RuleDeploymentArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RuleDeploymentArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + alerting: Optional[pulumi.Input[bool]] = None, + archived: Optional[pulumi.Input[bool]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + instance: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + rule: Optional[pulumi.Input[str]] = None, + run_frequency: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RuleDeploymentArgs.__new__(RuleDeploymentArgs) + + __props__.__dict__["alerting"] = alerting + __props__.__dict__["archived"] = archived + __props__.__dict__["enabled"] = enabled + if instance is None and not opts.urn: + raise TypeError("Missing required property 'instance'") + __props__.__dict__["instance"] = instance + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["project"] = project + if rule is None and not opts.urn: + raise TypeError("Missing required property 'rule'") + __props__.__dict__["rule"] = rule + __props__.__dict__["run_frequency"] = run_frequency + __props__.__dict__["archive_time"] = None + __props__.__dict__["consumer_rules"] = None + __props__.__dict__["execution_state"] = None + __props__.__dict__["last_alert_status_change_time"] = None + __props__.__dict__["name"] = None + __props__.__dict__["producer_rules"] = None + super(RuleDeployment, __self__).__init__( + 'gcp:chronicle/ruleDeployment:RuleDeployment', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + alerting: Optional[pulumi.Input[bool]] = None, + archive_time: Optional[pulumi.Input[str]] = None, + archived: Optional[pulumi.Input[bool]] = None, + consumer_rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + execution_state: Optional[pulumi.Input[str]] = None, + instance: Optional[pulumi.Input[str]] = None, + last_alert_status_change_time: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + producer_rules: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + rule: Optional[pulumi.Input[str]] = None, + run_frequency: Optional[pulumi.Input[str]] = None) -> 'RuleDeployment': + """ + Get an existing RuleDeployment resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] alerting: Whether detections resulting from this deployment should be considered + alerts. + :param pulumi.Input[str] archive_time: Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + :param pulumi.Input[bool] archived: The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + :param pulumi.Input[Sequence[pulumi.Input[str]]] consumer_rules: Output only. The names of the associated/chained consumer rules. Rules are considered + consumers of this rule if their rule text explicitly filters on this rule's ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[bool] enabled: Whether the rule is currently deployed continuously against incoming data. + :param pulumi.Input[str] execution_state: The execution state of the rule deployment. + Possible values: + DEFAULT + LIMITED + PAUSED + :param pulumi.Input[str] instance: The unique identifier for the Chronicle instance, which is the same as the customer ID. + :param pulumi.Input[str] last_alert_status_change_time: Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + :param pulumi.Input[str] location: The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + :param pulumi.Input[str] name: The resource name of the rule deployment. + Note that RuleDeployment is a child of the overall Rule, not any individual + revision, so the resource ID segment for the Rule resource must not + reference a specific revision. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + :param pulumi.Input[Sequence[pulumi.Input[str]]] producer_rules: Output only. The names of the associated/chained producer rules. Rules are considered + producers for this rule if this rule explicitly filters on their ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[str] rule: The Rule ID of the rule. + + + - - - + :param pulumi.Input[str] run_frequency: The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RuleDeploymentState.__new__(_RuleDeploymentState) + + __props__.__dict__["alerting"] = alerting + __props__.__dict__["archive_time"] = archive_time + __props__.__dict__["archived"] = archived + __props__.__dict__["consumer_rules"] = consumer_rules + __props__.__dict__["enabled"] = enabled + __props__.__dict__["execution_state"] = execution_state + __props__.__dict__["instance"] = instance + __props__.__dict__["last_alert_status_change_time"] = last_alert_status_change_time + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["producer_rules"] = producer_rules + __props__.__dict__["project"] = project + __props__.__dict__["rule"] = rule + __props__.__dict__["run_frequency"] = run_frequency + return RuleDeployment(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def alerting(self) -> pulumi.Output[Optional[bool]]: + """ + Whether detections resulting from this deployment should be considered + alerts. + """ + return pulumi.get(self, "alerting") + + @property + @pulumi.getter(name="archiveTime") + def archive_time(self) -> pulumi.Output[str]: + """ + Output only. The timestamp when the rule deployment archive state was last set to true. If the rule deployment's current archive state is not set to true, the field will be empty. + """ + return pulumi.get(self, "archive_time") + + @property + @pulumi.getter + def archived(self) -> pulumi.Output[Optional[bool]]: + """ + The archive state of the rule deployment. + Cannot be set to true unless enabled is set to false. + If set to true, alerting will automatically be set to false. + If currently set to true, enabled, alerting, and run_frequency cannot be + updated. + """ + return pulumi.get(self, "archived") + + @property + @pulumi.getter(name="consumerRules") + def consumer_rules(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. The names of the associated/chained consumer rules. Rules are considered + consumers of this rule if their rule text explicitly filters on this rule's ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "consumer_rules") + + @property + @pulumi.getter + def enabled(self) -> pulumi.Output[Optional[bool]]: + """ + Whether the rule is currently deployed continuously against incoming data. + """ + return pulumi.get(self, "enabled") + + @property + @pulumi.getter(name="executionState") + def execution_state(self) -> pulumi.Output[str]: + """ + The execution state of the rule deployment. + Possible values: + DEFAULT + LIMITED + PAUSED + """ + return pulumi.get(self, "execution_state") + + @property + @pulumi.getter + def instance(self) -> pulumi.Output[str]: + """ + The unique identifier for the Chronicle instance, which is the same as the customer ID. + """ + return pulumi.get(self, "instance") + + @property + @pulumi.getter(name="lastAlertStatusChangeTime") + def last_alert_status_change_time(self) -> pulumi.Output[str]: + """ + Output only. The timestamp when the rule deployment alert state was lastly changed. This is filled regardless of the current alert state.E.g. if the current alert status is false, this timestamp will be the timestamp when the alert status was changed to false. + """ + return pulumi.get(self, "last_alert_status_change_time") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the resource. This is the geographical region where the Chronicle instance resides, such as "us" or "europe-west2". + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the rule deployment. + Note that RuleDeployment is a child of the overall Rule, not any individual + revision, so the resource ID segment for the Rule resource must not + reference a specific revision. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule}/deployment + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="producerRules") + def producer_rules(self) -> pulumi.Output[Sequence[str]]: + """ + Output only. The names of the associated/chained producer rules. Rules are considered + producers for this rule if this rule explicitly filters on their ruleid. + Format: + projects/{project}/locations/{location}/instances/{instance}/rules/{rule} + """ + return pulumi.get(self, "producer_rules") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter + def rule(self) -> pulumi.Output[str]: + """ + The Rule ID of the rule. + + + - - - + """ + return pulumi.get(self, "rule") + + @property + @pulumi.getter(name="runFrequency") + def run_frequency(self) -> pulumi.Output[Optional[str]]: + """ + The run frequency of the rule deployment. + Possible values: + LIVE + HOURLY + DAILY + """ + return pulumi.get(self, "run_frequency") + diff --git a/sdk/python/pulumi_gcp/colab/__init__.py b/sdk/python/pulumi_gcp/colab/__init__.py new file mode 100644 index 0000000000..034d36b23e --- /dev/null +++ b/sdk/python/pulumi_gcp/colab/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +from .. import _utilities +import typing +# Export this package's modules as members: +from .runtime_template import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/colab/_inputs.py b/sdk/python/pulumi_gcp/colab/_inputs.py new file mode 100644 index 0000000000..79140d0986 --- /dev/null +++ b/sdk/python/pulumi_gcp/colab/_inputs.py @@ -0,0 +1,359 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'RuntimeTemplateDataPersistentDiskSpecArgs', + 'RuntimeTemplateDataPersistentDiskSpecArgsDict', + 'RuntimeTemplateEncryptionSpecArgs', + 'RuntimeTemplateEncryptionSpecArgsDict', + 'RuntimeTemplateEucConfigArgs', + 'RuntimeTemplateEucConfigArgsDict', + 'RuntimeTemplateIdleShutdownConfigArgs', + 'RuntimeTemplateIdleShutdownConfigArgsDict', + 'RuntimeTemplateMachineSpecArgs', + 'RuntimeTemplateMachineSpecArgsDict', + 'RuntimeTemplateNetworkSpecArgs', + 'RuntimeTemplateNetworkSpecArgsDict', + 'RuntimeTemplateShieldedVmConfigArgs', + 'RuntimeTemplateShieldedVmConfigArgsDict', +] + +MYPY = False + +if not MYPY: + class RuntimeTemplateDataPersistentDiskSpecArgsDict(TypedDict): + disk_size_gb: NotRequired[pulumi.Input[str]] + """ + The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + """ + disk_type: NotRequired[pulumi.Input[str]] + """ + The type of the persistent disk. + """ +elif False: + RuntimeTemplateDataPersistentDiskSpecArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateDataPersistentDiskSpecArgs: + def __init__(__self__, *, + disk_size_gb: Optional[pulumi.Input[str]] = None, + disk_type: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] disk_size_gb: The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + :param pulumi.Input[str] disk_type: The type of the persistent disk. + """ + if disk_size_gb is not None: + pulumi.set(__self__, "disk_size_gb", disk_size_gb) + if disk_type is not None: + pulumi.set(__self__, "disk_type", disk_type) + + @property + @pulumi.getter(name="diskSizeGb") + def disk_size_gb(self) -> Optional[pulumi.Input[str]]: + """ + The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + """ + return pulumi.get(self, "disk_size_gb") + + @disk_size_gb.setter + def disk_size_gb(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "disk_size_gb", value) + + @property + @pulumi.getter(name="diskType") + def disk_type(self) -> Optional[pulumi.Input[str]]: + """ + The type of the persistent disk. + """ + return pulumi.get(self, "disk_type") + + @disk_type.setter + def disk_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "disk_type", value) + + +if not MYPY: + class RuntimeTemplateEncryptionSpecArgsDict(TypedDict): + kms_key_name: NotRequired[pulumi.Input[str]] + """ + The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + """ +elif False: + RuntimeTemplateEncryptionSpecArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateEncryptionSpecArgs: + def __init__(__self__, *, + kms_key_name: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] kms_key_name: The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + """ + if kms_key_name is not None: + pulumi.set(__self__, "kms_key_name", kms_key_name) + + @property + @pulumi.getter(name="kmsKeyName") + def kms_key_name(self) -> Optional[pulumi.Input[str]]: + """ + The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + """ + return pulumi.get(self, "kms_key_name") + + @kms_key_name.setter + def kms_key_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key_name", value) + + +if not MYPY: + class RuntimeTemplateEucConfigArgsDict(TypedDict): + euc_disabled: NotRequired[pulumi.Input[bool]] + """ + Disable end user credential access for the runtime. + """ +elif False: + RuntimeTemplateEucConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateEucConfigArgs: + def __init__(__self__, *, + euc_disabled: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] euc_disabled: Disable end user credential access for the runtime. + """ + if euc_disabled is not None: + pulumi.set(__self__, "euc_disabled", euc_disabled) + + @property + @pulumi.getter(name="eucDisabled") + def euc_disabled(self) -> Optional[pulumi.Input[bool]]: + """ + Disable end user credential access for the runtime. + """ + return pulumi.get(self, "euc_disabled") + + @euc_disabled.setter + def euc_disabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "euc_disabled", value) + + +if not MYPY: + class RuntimeTemplateIdleShutdownConfigArgsDict(TypedDict): + idle_timeout: NotRequired[pulumi.Input[str]] + """ + The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + """ +elif False: + RuntimeTemplateIdleShutdownConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateIdleShutdownConfigArgs: + def __init__(__self__, *, + idle_timeout: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] idle_timeout: The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + """ + if idle_timeout is not None: + pulumi.set(__self__, "idle_timeout", idle_timeout) + + @property + @pulumi.getter(name="idleTimeout") + def idle_timeout(self) -> Optional[pulumi.Input[str]]: + """ + The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + """ + return pulumi.get(self, "idle_timeout") + + @idle_timeout.setter + def idle_timeout(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "idle_timeout", value) + + +if not MYPY: + class RuntimeTemplateMachineSpecArgsDict(TypedDict): + accelerator_count: NotRequired[pulumi.Input[int]] + """ + The number of accelerators used by the runtime. + """ + accelerator_type: NotRequired[pulumi.Input[str]] + """ + The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + """ + machine_type: NotRequired[pulumi.Input[str]] + """ + The Compute Engine machine type selected for the runtime. + """ +elif False: + RuntimeTemplateMachineSpecArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateMachineSpecArgs: + def __init__(__self__, *, + accelerator_count: Optional[pulumi.Input[int]] = None, + accelerator_type: Optional[pulumi.Input[str]] = None, + machine_type: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[int] accelerator_count: The number of accelerators used by the runtime. + :param pulumi.Input[str] accelerator_type: The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + :param pulumi.Input[str] machine_type: The Compute Engine machine type selected for the runtime. + """ + if accelerator_count is not None: + pulumi.set(__self__, "accelerator_count", accelerator_count) + if accelerator_type is not None: + pulumi.set(__self__, "accelerator_type", accelerator_type) + if machine_type is not None: + pulumi.set(__self__, "machine_type", machine_type) + + @property + @pulumi.getter(name="acceleratorCount") + def accelerator_count(self) -> Optional[pulumi.Input[int]]: + """ + The number of accelerators used by the runtime. + """ + return pulumi.get(self, "accelerator_count") + + @accelerator_count.setter + def accelerator_count(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "accelerator_count", value) + + @property + @pulumi.getter(name="acceleratorType") + def accelerator_type(self) -> Optional[pulumi.Input[str]]: + """ + The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + """ + return pulumi.get(self, "accelerator_type") + + @accelerator_type.setter + def accelerator_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "accelerator_type", value) + + @property + @pulumi.getter(name="machineType") + def machine_type(self) -> Optional[pulumi.Input[str]]: + """ + The Compute Engine machine type selected for the runtime. + """ + return pulumi.get(self, "machine_type") + + @machine_type.setter + def machine_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "machine_type", value) + + +if not MYPY: + class RuntimeTemplateNetworkSpecArgsDict(TypedDict): + enable_internet_access: NotRequired[pulumi.Input[bool]] + """ + Enable public internet access for the runtime. + """ + network: NotRequired[pulumi.Input[str]] + """ + The name of the VPC that this runtime is in. + """ + subnetwork: NotRequired[pulumi.Input[str]] + """ + The name of the subnetwork that this runtime is in. + """ +elif False: + RuntimeTemplateNetworkSpecArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateNetworkSpecArgs: + def __init__(__self__, *, + enable_internet_access: Optional[pulumi.Input[bool]] = None, + network: Optional[pulumi.Input[str]] = None, + subnetwork: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[bool] enable_internet_access: Enable public internet access for the runtime. + :param pulumi.Input[str] network: The name of the VPC that this runtime is in. + :param pulumi.Input[str] subnetwork: The name of the subnetwork that this runtime is in. + """ + if enable_internet_access is not None: + pulumi.set(__self__, "enable_internet_access", enable_internet_access) + if network is not None: + pulumi.set(__self__, "network", network) + if subnetwork is not None: + pulumi.set(__self__, "subnetwork", subnetwork) + + @property + @pulumi.getter(name="enableInternetAccess") + def enable_internet_access(self) -> Optional[pulumi.Input[bool]]: + """ + Enable public internet access for the runtime. + """ + return pulumi.get(self, "enable_internet_access") + + @enable_internet_access.setter + def enable_internet_access(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_internet_access", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + The name of the VPC that this runtime is in. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def subnetwork(self) -> Optional[pulumi.Input[str]]: + """ + The name of the subnetwork that this runtime is in. + """ + return pulumi.get(self, "subnetwork") + + @subnetwork.setter + def subnetwork(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "subnetwork", value) + + +if not MYPY: + class RuntimeTemplateShieldedVmConfigArgsDict(TypedDict): + enable_secure_boot: NotRequired[pulumi.Input[bool]] + """ + Enables secure boot for the runtime. + """ +elif False: + RuntimeTemplateShieldedVmConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RuntimeTemplateShieldedVmConfigArgs: + def __init__(__self__, *, + enable_secure_boot: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] enable_secure_boot: Enables secure boot for the runtime. + """ + if enable_secure_boot is not None: + pulumi.set(__self__, "enable_secure_boot", enable_secure_boot) + + @property + @pulumi.getter(name="enableSecureBoot") + def enable_secure_boot(self) -> Optional[pulumi.Input[bool]]: + """ + Enables secure boot for the runtime. + """ + return pulumi.get(self, "enable_secure_boot") + + @enable_secure_boot.setter + def enable_secure_boot(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_secure_boot", value) + + diff --git a/sdk/python/pulumi_gcp/colab/outputs.py b/sdk/python/pulumi_gcp/colab/outputs.py new file mode 100644 index 0000000000..947d9cf643 --- /dev/null +++ b/sdk/python/pulumi_gcp/colab/outputs.py @@ -0,0 +1,344 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'RuntimeTemplateDataPersistentDiskSpec', + 'RuntimeTemplateEncryptionSpec', + 'RuntimeTemplateEucConfig', + 'RuntimeTemplateIdleShutdownConfig', + 'RuntimeTemplateMachineSpec', + 'RuntimeTemplateNetworkSpec', + 'RuntimeTemplateShieldedVmConfig', +] + +@pulumi.output_type +class RuntimeTemplateDataPersistentDiskSpec(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "diskSizeGb": + suggest = "disk_size_gb" + elif key == "diskType": + suggest = "disk_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateDataPersistentDiskSpec. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateDataPersistentDiskSpec.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateDataPersistentDiskSpec.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + disk_size_gb: Optional[str] = None, + disk_type: Optional[str] = None): + """ + :param str disk_size_gb: The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + :param str disk_type: The type of the persistent disk. + """ + if disk_size_gb is not None: + pulumi.set(__self__, "disk_size_gb", disk_size_gb) + if disk_type is not None: + pulumi.set(__self__, "disk_type", disk_type) + + @property + @pulumi.getter(name="diskSizeGb") + def disk_size_gb(self) -> Optional[str]: + """ + The disk size of the runtime in GB. If specified, the diskType must also be specified. The minimum size is 10GB and the maximum is 65536GB. + """ + return pulumi.get(self, "disk_size_gb") + + @property + @pulumi.getter(name="diskType") + def disk_type(self) -> Optional[str]: + """ + The type of the persistent disk. + """ + return pulumi.get(self, "disk_type") + + +@pulumi.output_type +class RuntimeTemplateEncryptionSpec(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "kmsKeyName": + suggest = "kms_key_name" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateEncryptionSpec. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateEncryptionSpec.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateEncryptionSpec.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + kms_key_name: Optional[str] = None): + """ + :param str kms_key_name: The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + """ + if kms_key_name is not None: + pulumi.set(__self__, "kms_key_name", kms_key_name) + + @property + @pulumi.getter(name="kmsKeyName") + def kms_key_name(self) -> Optional[str]: + """ + The Cloud KMS encryption key (customer-managed encryption key) used to protect the runtime. + """ + return pulumi.get(self, "kms_key_name") + + +@pulumi.output_type +class RuntimeTemplateEucConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "eucDisabled": + suggest = "euc_disabled" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateEucConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateEucConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateEucConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + euc_disabled: Optional[bool] = None): + """ + :param bool euc_disabled: Disable end user credential access for the runtime. + """ + if euc_disabled is not None: + pulumi.set(__self__, "euc_disabled", euc_disabled) + + @property + @pulumi.getter(name="eucDisabled") + def euc_disabled(self) -> Optional[bool]: + """ + Disable end user credential access for the runtime. + """ + return pulumi.get(self, "euc_disabled") + + +@pulumi.output_type +class RuntimeTemplateIdleShutdownConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "idleTimeout": + suggest = "idle_timeout" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateIdleShutdownConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateIdleShutdownConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateIdleShutdownConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + idle_timeout: Optional[str] = None): + """ + :param str idle_timeout: The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + """ + if idle_timeout is not None: + pulumi.set(__self__, "idle_timeout", idle_timeout) + + @property + @pulumi.getter(name="idleTimeout") + def idle_timeout(self) -> Optional[str]: + """ + The duration after which the runtime is automatically shut down. An input of 0s disables the idle shutdown feature, and a valid range is [10m, 24h]. + """ + return pulumi.get(self, "idle_timeout") + + +@pulumi.output_type +class RuntimeTemplateMachineSpec(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "acceleratorCount": + suggest = "accelerator_count" + elif key == "acceleratorType": + suggest = "accelerator_type" + elif key == "machineType": + suggest = "machine_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateMachineSpec. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateMachineSpec.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateMachineSpec.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + accelerator_count: Optional[int] = None, + accelerator_type: Optional[str] = None, + machine_type: Optional[str] = None): + """ + :param int accelerator_count: The number of accelerators used by the runtime. + :param str accelerator_type: The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + :param str machine_type: The Compute Engine machine type selected for the runtime. + """ + if accelerator_count is not None: + pulumi.set(__self__, "accelerator_count", accelerator_count) + if accelerator_type is not None: + pulumi.set(__self__, "accelerator_type", accelerator_type) + if machine_type is not None: + pulumi.set(__self__, "machine_type", machine_type) + + @property + @pulumi.getter(name="acceleratorCount") + def accelerator_count(self) -> Optional[int]: + """ + The number of accelerators used by the runtime. + """ + return pulumi.get(self, "accelerator_count") + + @property + @pulumi.getter(name="acceleratorType") + def accelerator_type(self) -> Optional[str]: + """ + The type of hardware accelerator used by the runtime. If specified, acceleratorCount must also be specified. + """ + return pulumi.get(self, "accelerator_type") + + @property + @pulumi.getter(name="machineType") + def machine_type(self) -> Optional[str]: + """ + The Compute Engine machine type selected for the runtime. + """ + return pulumi.get(self, "machine_type") + + +@pulumi.output_type +class RuntimeTemplateNetworkSpec(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "enableInternetAccess": + suggest = "enable_internet_access" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateNetworkSpec. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateNetworkSpec.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateNetworkSpec.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + enable_internet_access: Optional[bool] = None, + network: Optional[str] = None, + subnetwork: Optional[str] = None): + """ + :param bool enable_internet_access: Enable public internet access for the runtime. + :param str network: The name of the VPC that this runtime is in. + :param str subnetwork: The name of the subnetwork that this runtime is in. + """ + if enable_internet_access is not None: + pulumi.set(__self__, "enable_internet_access", enable_internet_access) + if network is not None: + pulumi.set(__self__, "network", network) + if subnetwork is not None: + pulumi.set(__self__, "subnetwork", subnetwork) + + @property + @pulumi.getter(name="enableInternetAccess") + def enable_internet_access(self) -> Optional[bool]: + """ + Enable public internet access for the runtime. + """ + return pulumi.get(self, "enable_internet_access") + + @property + @pulumi.getter + def network(self) -> Optional[str]: + """ + The name of the VPC that this runtime is in. + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter + def subnetwork(self) -> Optional[str]: + """ + The name of the subnetwork that this runtime is in. + """ + return pulumi.get(self, "subnetwork") + + +@pulumi.output_type +class RuntimeTemplateShieldedVmConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "enableSecureBoot": + suggest = "enable_secure_boot" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RuntimeTemplateShieldedVmConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RuntimeTemplateShieldedVmConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RuntimeTemplateShieldedVmConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + enable_secure_boot: Optional[bool] = None): + """ + :param bool enable_secure_boot: Enables secure boot for the runtime. + """ + if enable_secure_boot is not None: + pulumi.set(__self__, "enable_secure_boot", enable_secure_boot) + + @property + @pulumi.getter(name="enableSecureBoot") + def enable_secure_boot(self) -> Optional[bool]: + """ + Enables secure boot for the runtime. + """ + return pulumi.get(self, "enable_secure_boot") + + diff --git a/sdk/python/pulumi_gcp/colab/runtime_template.py b/sdk/python/pulumi_gcp/colab/runtime_template.py new file mode 100644 index 0000000000..b386ffa67c --- /dev/null +++ b/sdk/python/pulumi_gcp/colab/runtime_template.py @@ -0,0 +1,1160 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RuntimeTemplateArgs', 'RuntimeTemplate'] + +@pulumi.input_type +class RuntimeTemplateArgs: + def __init__(__self__, *, + display_name: pulumi.Input[str], + location: pulumi.Input[str], + data_persistent_disk_spec: Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']] = None, + description: Optional[pulumi.Input[str]] = None, + encryption_spec: Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']] = None, + euc_config: Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']] = None, + idle_shutdown_config: Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + machine_spec: Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']] = None, + name: Optional[pulumi.Input[str]] = None, + network_spec: Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']] = None, + network_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + shielded_vm_config: Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']] = None): + """ + The set of arguments for constructing a RuntimeTemplate resource. + :param pulumi.Input[str] display_name: Required. The display name of the Runtime Template. + :param pulumi.Input[str] location: The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + :param pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs'] data_persistent_disk_spec: The configuration for the data disk of the runtime. + Structure is documented below. + :param pulumi.Input[str] description: The description of the Runtime Template. + :param pulumi.Input['RuntimeTemplateEncryptionSpecArgs'] encryption_spec: Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + :param pulumi.Input['RuntimeTemplateEucConfigArgs'] euc_config: EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + :param pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs'] idle_shutdown_config: Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input['RuntimeTemplateMachineSpecArgs'] machine_spec: 'The machine configuration of the runtime.' + Structure is documented below. + :param pulumi.Input[str] name: The resource name of the Runtime Template + :param pulumi.Input['RuntimeTemplateNetworkSpecArgs'] network_spec: The network configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[str]]] network_tags: Applies the given Compute Engine tags to the runtime. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input['RuntimeTemplateShieldedVmConfigArgs'] shielded_vm_config: Runtime Shielded VM spec. + Structure is documented below. + """ + pulumi.set(__self__, "display_name", display_name) + pulumi.set(__self__, "location", location) + if data_persistent_disk_spec is not None: + pulumi.set(__self__, "data_persistent_disk_spec", data_persistent_disk_spec) + if description is not None: + pulumi.set(__self__, "description", description) + if encryption_spec is not None: + pulumi.set(__self__, "encryption_spec", encryption_spec) + if euc_config is not None: + pulumi.set(__self__, "euc_config", euc_config) + if idle_shutdown_config is not None: + pulumi.set(__self__, "idle_shutdown_config", idle_shutdown_config) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if machine_spec is not None: + pulumi.set(__self__, "machine_spec", machine_spec) + if name is not None: + pulumi.set(__self__, "name", name) + if network_spec is not None: + pulumi.set(__self__, "network_spec", network_spec) + if network_tags is not None: + pulumi.set(__self__, "network_tags", network_tags) + if project is not None: + pulumi.set(__self__, "project", project) + if shielded_vm_config is not None: + pulumi.set(__self__, "shielded_vm_config", shielded_vm_config) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Input[str]: + """ + Required. The display name of the Runtime Template. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: pulumi.Input[str]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="dataPersistentDiskSpec") + def data_persistent_disk_spec(self) -> Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']]: + """ + The configuration for the data disk of the runtime. + Structure is documented below. + """ + return pulumi.get(self, "data_persistent_disk_spec") + + @data_persistent_disk_spec.setter + def data_persistent_disk_spec(self, value: Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']]): + pulumi.set(self, "data_persistent_disk_spec", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + The description of the Runtime Template. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="encryptionSpec") + def encryption_spec(self) -> Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']]: + """ + Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + """ + return pulumi.get(self, "encryption_spec") + + @encryption_spec.setter + def encryption_spec(self, value: Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']]): + pulumi.set(self, "encryption_spec", value) + + @property + @pulumi.getter(name="eucConfig") + def euc_config(self) -> Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']]: + """ + EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + """ + return pulumi.get(self, "euc_config") + + @euc_config.setter + def euc_config(self, value: Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']]): + pulumi.set(self, "euc_config", value) + + @property + @pulumi.getter(name="idleShutdownConfig") + def idle_shutdown_config(self) -> Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']]: + """ + Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "idle_shutdown_config") + + @idle_shutdown_config.setter + def idle_shutdown_config(self, value: Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']]): + pulumi.set(self, "idle_shutdown_config", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter(name="machineSpec") + def machine_spec(self) -> Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']]: + """ + 'The machine configuration of the runtime.' + Structure is documented below. + """ + return pulumi.get(self, "machine_spec") + + @machine_spec.setter + def machine_spec(self, value: Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']]): + pulumi.set(self, "machine_spec", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Runtime Template + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="networkSpec") + def network_spec(self) -> Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']]: + """ + The network configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "network_spec") + + @network_spec.setter + def network_spec(self, value: Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']]): + pulumi.set(self, "network_spec", value) + + @property + @pulumi.getter(name="networkTags") + def network_tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Applies the given Compute Engine tags to the runtime. + """ + return pulumi.get(self, "network_tags") + + @network_tags.setter + def network_tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "network_tags", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="shieldedVmConfig") + def shielded_vm_config(self) -> Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']]: + """ + Runtime Shielded VM spec. + Structure is documented below. + """ + return pulumi.get(self, "shielded_vm_config") + + @shielded_vm_config.setter + def shielded_vm_config(self, value: Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']]): + pulumi.set(self, "shielded_vm_config", value) + + +@pulumi.input_type +class _RuntimeTemplateState: + def __init__(__self__, *, + data_persistent_disk_spec: Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']] = None, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + encryption_spec: Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']] = None, + euc_config: Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']] = None, + idle_shutdown_config: Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + machine_spec: Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']] = None, + name: Optional[pulumi.Input[str]] = None, + network_spec: Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']] = None, + network_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + shielded_vm_config: Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']] = None): + """ + Input properties used for looking up and filtering RuntimeTemplate resources. + :param pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs'] data_persistent_disk_spec: The configuration for the data disk of the runtime. + Structure is documented below. + :param pulumi.Input[str] description: The description of the Runtime Template. + :param pulumi.Input[str] display_name: Required. The display name of the Runtime Template. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input['RuntimeTemplateEncryptionSpecArgs'] encryption_spec: Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + :param pulumi.Input['RuntimeTemplateEucConfigArgs'] euc_config: EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + :param pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs'] idle_shutdown_config: Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + :param pulumi.Input['RuntimeTemplateMachineSpecArgs'] machine_spec: 'The machine configuration of the runtime.' + Structure is documented below. + :param pulumi.Input[str] name: The resource name of the Runtime Template + :param pulumi.Input['RuntimeTemplateNetworkSpecArgs'] network_spec: The network configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[str]]] network_tags: Applies the given Compute Engine tags to the runtime. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input['RuntimeTemplateShieldedVmConfigArgs'] shielded_vm_config: Runtime Shielded VM spec. + Structure is documented below. + """ + if data_persistent_disk_spec is not None: + pulumi.set(__self__, "data_persistent_disk_spec", data_persistent_disk_spec) + if description is not None: + pulumi.set(__self__, "description", description) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if encryption_spec is not None: + pulumi.set(__self__, "encryption_spec", encryption_spec) + if euc_config is not None: + pulumi.set(__self__, "euc_config", euc_config) + if idle_shutdown_config is not None: + pulumi.set(__self__, "idle_shutdown_config", idle_shutdown_config) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if machine_spec is not None: + pulumi.set(__self__, "machine_spec", machine_spec) + if name is not None: + pulumi.set(__self__, "name", name) + if network_spec is not None: + pulumi.set(__self__, "network_spec", network_spec) + if network_tags is not None: + pulumi.set(__self__, "network_tags", network_tags) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if shielded_vm_config is not None: + pulumi.set(__self__, "shielded_vm_config", shielded_vm_config) + + @property + @pulumi.getter(name="dataPersistentDiskSpec") + def data_persistent_disk_spec(self) -> Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']]: + """ + The configuration for the data disk of the runtime. + Structure is documented below. + """ + return pulumi.get(self, "data_persistent_disk_spec") + + @data_persistent_disk_spec.setter + def data_persistent_disk_spec(self, value: Optional[pulumi.Input['RuntimeTemplateDataPersistentDiskSpecArgs']]): + pulumi.set(self, "data_persistent_disk_spec", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + The description of the Runtime Template. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Required. The display name of the Runtime Template. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter(name="encryptionSpec") + def encryption_spec(self) -> Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']]: + """ + Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + """ + return pulumi.get(self, "encryption_spec") + + @encryption_spec.setter + def encryption_spec(self, value: Optional[pulumi.Input['RuntimeTemplateEncryptionSpecArgs']]): + pulumi.set(self, "encryption_spec", value) + + @property + @pulumi.getter(name="eucConfig") + def euc_config(self) -> Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']]: + """ + EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + """ + return pulumi.get(self, "euc_config") + + @euc_config.setter + def euc_config(self, value: Optional[pulumi.Input['RuntimeTemplateEucConfigArgs']]): + pulumi.set(self, "euc_config", value) + + @property + @pulumi.getter(name="idleShutdownConfig") + def idle_shutdown_config(self) -> Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']]: + """ + Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "idle_shutdown_config") + + @idle_shutdown_config.setter + def idle_shutdown_config(self, value: Optional[pulumi.Input['RuntimeTemplateIdleShutdownConfigArgs']]): + pulumi.set(self, "idle_shutdown_config", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="machineSpec") + def machine_spec(self) -> Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']]: + """ + 'The machine configuration of the runtime.' + Structure is documented below. + """ + return pulumi.get(self, "machine_spec") + + @machine_spec.setter + def machine_spec(self, value: Optional[pulumi.Input['RuntimeTemplateMachineSpecArgs']]): + pulumi.set(self, "machine_spec", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Runtime Template + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="networkSpec") + def network_spec(self) -> Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']]: + """ + The network configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "network_spec") + + @network_spec.setter + def network_spec(self, value: Optional[pulumi.Input['RuntimeTemplateNetworkSpecArgs']]): + pulumi.set(self, "network_spec", value) + + @property + @pulumi.getter(name="networkTags") + def network_tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Applies the given Compute Engine tags to the runtime. + """ + return pulumi.get(self, "network_tags") + + @network_tags.setter + def network_tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "network_tags", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter(name="shieldedVmConfig") + def shielded_vm_config(self) -> Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']]: + """ + Runtime Shielded VM spec. + Structure is documented below. + """ + return pulumi.get(self, "shielded_vm_config") + + @shielded_vm_config.setter + def shielded_vm_config(self, value: Optional[pulumi.Input['RuntimeTemplateShieldedVmConfigArgs']]): + pulumi.set(self, "shielded_vm_config", value) + + +class RuntimeTemplate(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + data_persistent_disk_spec: Optional[pulumi.Input[Union['RuntimeTemplateDataPersistentDiskSpecArgs', 'RuntimeTemplateDataPersistentDiskSpecArgsDict']]] = None, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + encryption_spec: Optional[pulumi.Input[Union['RuntimeTemplateEncryptionSpecArgs', 'RuntimeTemplateEncryptionSpecArgsDict']]] = None, + euc_config: Optional[pulumi.Input[Union['RuntimeTemplateEucConfigArgs', 'RuntimeTemplateEucConfigArgsDict']]] = None, + idle_shutdown_config: Optional[pulumi.Input[Union['RuntimeTemplateIdleShutdownConfigArgs', 'RuntimeTemplateIdleShutdownConfigArgsDict']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + machine_spec: Optional[pulumi.Input[Union['RuntimeTemplateMachineSpecArgs', 'RuntimeTemplateMachineSpecArgsDict']]] = None, + name: Optional[pulumi.Input[str]] = None, + network_spec: Optional[pulumi.Input[Union['RuntimeTemplateNetworkSpecArgs', 'RuntimeTemplateNetworkSpecArgsDict']]] = None, + network_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + shielded_vm_config: Optional[pulumi.Input[Union['RuntimeTemplateShieldedVmConfigArgs', 'RuntimeTemplateShieldedVmConfigArgsDict']]] = None, + __props__=None): + """ + 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, + as well as common settings such as the network and whether public internet access is enabled. When you create + a runtime, its VM is created according to the specifications of a runtime template.' + + To get more information about RuntimeTemplate, see: + + * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) + * How-to Guides + * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) + + ## Example Usage + + ### Colab Runtime Template Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + name="colab-runtime-template", + display_name="Runtime template basic", + location="us-central1", + machine_spec={ + "machine_type": "e2-standard-4", + }, + network_spec={ + "enable_internet_access": True, + }) + ``` + ### Colab Runtime Template No Name + + ```python + import pulumi + import pulumi_gcp as gcp + + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + display_name="Runtime template no name", + location="us-central1", + machine_spec={ + "machine_type": "e2-standard-4", + }, + network_spec={ + "enable_internet_access": True, + }) + ``` + ### Colab Runtime Template Full + + ```python + import pulumi + import pulumi_gcp as gcp + + my_network = gcp.compute.Network("my_network", + name="colab-test-default", + auto_create_subnetworks=False) + my_subnetwork = gcp.compute.Subnetwork("my_subnetwork", + name="colab-test-default", + network=my_network.id, + region="us-central1", + ip_cidr_range="10.0.1.0/24") + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + name="colab-runtime-template", + display_name="Runtime template full", + location="us-central1", + description="Full runtime template", + machine_spec={ + "machine_type": "n1-standard-2", + "accelerator_type": "NVIDIA_TESLA_T4", + "accelerator_count": 1, + }, + data_persistent_disk_spec={ + "disk_type": "pd-standard", + "disk_size_gb": "200", + }, + network_spec={ + "enable_internet_access": True, + "network": my_network.id, + "subnetwork": my_subnetwork.id, + }, + labels={ + "k": "val", + }, + idle_shutdown_config={ + "idle_timeout": "3600s", + }, + euc_config={ + "euc_disabled": True, + }, + shielded_vm_config={ + "enable_secure_boot": True, + }, + network_tags=[ + "abc", + "def", + ], + encryption_spec={ + "kms_key_name": "my-crypto-key", + }) + ``` + + ## Import + + RuntimeTemplate can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` + + * `{{project}}/{{location}}/{{name}}` + + * `{{location}}/{{name}}` + + When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} + ``` + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['RuntimeTemplateDataPersistentDiskSpecArgs', 'RuntimeTemplateDataPersistentDiskSpecArgsDict']] data_persistent_disk_spec: The configuration for the data disk of the runtime. + Structure is documented below. + :param pulumi.Input[str] description: The description of the Runtime Template. + :param pulumi.Input[str] display_name: Required. The display name of the Runtime Template. + :param pulumi.Input[Union['RuntimeTemplateEncryptionSpecArgs', 'RuntimeTemplateEncryptionSpecArgsDict']] encryption_spec: Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + :param pulumi.Input[Union['RuntimeTemplateEucConfigArgs', 'RuntimeTemplateEucConfigArgsDict']] euc_config: EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + :param pulumi.Input[Union['RuntimeTemplateIdleShutdownConfigArgs', 'RuntimeTemplateIdleShutdownConfigArgsDict']] idle_shutdown_config: Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + :param pulumi.Input[Union['RuntimeTemplateMachineSpecArgs', 'RuntimeTemplateMachineSpecArgsDict']] machine_spec: 'The machine configuration of the runtime.' + Structure is documented below. + :param pulumi.Input[str] name: The resource name of the Runtime Template + :param pulumi.Input[Union['RuntimeTemplateNetworkSpecArgs', 'RuntimeTemplateNetworkSpecArgsDict']] network_spec: The network configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[str]]] network_tags: Applies the given Compute Engine tags to the runtime. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Union['RuntimeTemplateShieldedVmConfigArgs', 'RuntimeTemplateShieldedVmConfigArgsDict']] shielded_vm_config: Runtime Shielded VM spec. + Structure is documented below. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RuntimeTemplateArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + 'A runtime template is a VM configuration that specifies a machine type and other characteristics of the VM, + as well as common settings such as the network and whether public internet access is enabled. When you create + a runtime, its VM is created according to the specifications of a runtime template.' + + To get more information about RuntimeTemplate, see: + + * [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.notebookRuntimeTemplates) + * How-to Guides + * [Create a runtime template](https://cloud.google.com/colab/docs/create-runtime-template) + + ## Example Usage + + ### Colab Runtime Template Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + name="colab-runtime-template", + display_name="Runtime template basic", + location="us-central1", + machine_spec={ + "machine_type": "e2-standard-4", + }, + network_spec={ + "enable_internet_access": True, + }) + ``` + ### Colab Runtime Template No Name + + ```python + import pulumi + import pulumi_gcp as gcp + + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + display_name="Runtime template no name", + location="us-central1", + machine_spec={ + "machine_type": "e2-standard-4", + }, + network_spec={ + "enable_internet_access": True, + }) + ``` + ### Colab Runtime Template Full + + ```python + import pulumi + import pulumi_gcp as gcp + + my_network = gcp.compute.Network("my_network", + name="colab-test-default", + auto_create_subnetworks=False) + my_subnetwork = gcp.compute.Subnetwork("my_subnetwork", + name="colab-test-default", + network=my_network.id, + region="us-central1", + ip_cidr_range="10.0.1.0/24") + runtime_template = gcp.colab.RuntimeTemplate("runtime-template", + name="colab-runtime-template", + display_name="Runtime template full", + location="us-central1", + description="Full runtime template", + machine_spec={ + "machine_type": "n1-standard-2", + "accelerator_type": "NVIDIA_TESLA_T4", + "accelerator_count": 1, + }, + data_persistent_disk_spec={ + "disk_type": "pd-standard", + "disk_size_gb": "200", + }, + network_spec={ + "enable_internet_access": True, + "network": my_network.id, + "subnetwork": my_subnetwork.id, + }, + labels={ + "k": "val", + }, + idle_shutdown_config={ + "idle_timeout": "3600s", + }, + euc_config={ + "euc_disabled": True, + }, + shielded_vm_config={ + "enable_secure_boot": True, + }, + network_tags=[ + "abc", + "def", + ], + encryption_spec={ + "kms_key_name": "my-crypto-key", + }) + ``` + + ## Import + + RuntimeTemplate can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}}` + + * `{{project}}/{{location}}/{{name}}` + + * `{{location}}/{{name}}` + + When using the `pulumi import` command, RuntimeTemplate can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default projects/{{project}}/locations/{{location}}/notebookRuntimeTemplates/{{name}} + ``` + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:colab/runtimeTemplate:RuntimeTemplate default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param RuntimeTemplateArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RuntimeTemplateArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + data_persistent_disk_spec: Optional[pulumi.Input[Union['RuntimeTemplateDataPersistentDiskSpecArgs', 'RuntimeTemplateDataPersistentDiskSpecArgsDict']]] = None, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + encryption_spec: Optional[pulumi.Input[Union['RuntimeTemplateEncryptionSpecArgs', 'RuntimeTemplateEncryptionSpecArgsDict']]] = None, + euc_config: Optional[pulumi.Input[Union['RuntimeTemplateEucConfigArgs', 'RuntimeTemplateEucConfigArgsDict']]] = None, + idle_shutdown_config: Optional[pulumi.Input[Union['RuntimeTemplateIdleShutdownConfigArgs', 'RuntimeTemplateIdleShutdownConfigArgsDict']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + machine_spec: Optional[pulumi.Input[Union['RuntimeTemplateMachineSpecArgs', 'RuntimeTemplateMachineSpecArgsDict']]] = None, + name: Optional[pulumi.Input[str]] = None, + network_spec: Optional[pulumi.Input[Union['RuntimeTemplateNetworkSpecArgs', 'RuntimeTemplateNetworkSpecArgsDict']]] = None, + network_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + shielded_vm_config: Optional[pulumi.Input[Union['RuntimeTemplateShieldedVmConfigArgs', 'RuntimeTemplateShieldedVmConfigArgsDict']]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RuntimeTemplateArgs.__new__(RuntimeTemplateArgs) + + __props__.__dict__["data_persistent_disk_spec"] = data_persistent_disk_spec + __props__.__dict__["description"] = description + if display_name is None and not opts.urn: + raise TypeError("Missing required property 'display_name'") + __props__.__dict__["display_name"] = display_name + __props__.__dict__["encryption_spec"] = encryption_spec + __props__.__dict__["euc_config"] = euc_config + __props__.__dict__["idle_shutdown_config"] = idle_shutdown_config + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["machine_spec"] = machine_spec + __props__.__dict__["name"] = name + __props__.__dict__["network_spec"] = network_spec + __props__.__dict__["network_tags"] = network_tags + __props__.__dict__["project"] = project + __props__.__dict__["shielded_vm_config"] = shielded_vm_config + __props__.__dict__["effective_labels"] = None + __props__.__dict__["pulumi_labels"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(RuntimeTemplate, __self__).__init__( + 'gcp:colab/runtimeTemplate:RuntimeTemplate', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + data_persistent_disk_spec: Optional[pulumi.Input[Union['RuntimeTemplateDataPersistentDiskSpecArgs', 'RuntimeTemplateDataPersistentDiskSpecArgsDict']]] = None, + description: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + encryption_spec: Optional[pulumi.Input[Union['RuntimeTemplateEncryptionSpecArgs', 'RuntimeTemplateEncryptionSpecArgsDict']]] = None, + euc_config: Optional[pulumi.Input[Union['RuntimeTemplateEucConfigArgs', 'RuntimeTemplateEucConfigArgsDict']]] = None, + idle_shutdown_config: Optional[pulumi.Input[Union['RuntimeTemplateIdleShutdownConfigArgs', 'RuntimeTemplateIdleShutdownConfigArgsDict']]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + machine_spec: Optional[pulumi.Input[Union['RuntimeTemplateMachineSpecArgs', 'RuntimeTemplateMachineSpecArgsDict']]] = None, + name: Optional[pulumi.Input[str]] = None, + network_spec: Optional[pulumi.Input[Union['RuntimeTemplateNetworkSpecArgs', 'RuntimeTemplateNetworkSpecArgsDict']]] = None, + network_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + shielded_vm_config: Optional[pulumi.Input[Union['RuntimeTemplateShieldedVmConfigArgs', 'RuntimeTemplateShieldedVmConfigArgsDict']]] = None) -> 'RuntimeTemplate': + """ + Get an existing RuntimeTemplate resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['RuntimeTemplateDataPersistentDiskSpecArgs', 'RuntimeTemplateDataPersistentDiskSpecArgsDict']] data_persistent_disk_spec: The configuration for the data disk of the runtime. + Structure is documented below. + :param pulumi.Input[str] description: The description of the Runtime Template. + :param pulumi.Input[str] display_name: Required. The display name of the Runtime Template. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Union['RuntimeTemplateEncryptionSpecArgs', 'RuntimeTemplateEncryptionSpecArgsDict']] encryption_spec: Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + :param pulumi.Input[Union['RuntimeTemplateEucConfigArgs', 'RuntimeTemplateEucConfigArgsDict']] euc_config: EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + :param pulumi.Input[Union['RuntimeTemplateIdleShutdownConfigArgs', 'RuntimeTemplateIdleShutdownConfigArgsDict']] idle_shutdown_config: Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + :param pulumi.Input[Union['RuntimeTemplateMachineSpecArgs', 'RuntimeTemplateMachineSpecArgsDict']] machine_spec: 'The machine configuration of the runtime.' + Structure is documented below. + :param pulumi.Input[str] name: The resource name of the Runtime Template + :param pulumi.Input[Union['RuntimeTemplateNetworkSpecArgs', 'RuntimeTemplateNetworkSpecArgsDict']] network_spec: The network configuration for the runtime. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[str]]] network_tags: Applies the given Compute Engine tags to the runtime. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[Union['RuntimeTemplateShieldedVmConfigArgs', 'RuntimeTemplateShieldedVmConfigArgsDict']] shielded_vm_config: Runtime Shielded VM spec. + Structure is documented below. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RuntimeTemplateState.__new__(_RuntimeTemplateState) + + __props__.__dict__["data_persistent_disk_spec"] = data_persistent_disk_spec + __props__.__dict__["description"] = description + __props__.__dict__["display_name"] = display_name + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["encryption_spec"] = encryption_spec + __props__.__dict__["euc_config"] = euc_config + __props__.__dict__["idle_shutdown_config"] = idle_shutdown_config + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["machine_spec"] = machine_spec + __props__.__dict__["name"] = name + __props__.__dict__["network_spec"] = network_spec + __props__.__dict__["network_tags"] = network_tags + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["shielded_vm_config"] = shielded_vm_config + return RuntimeTemplate(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="dataPersistentDiskSpec") + def data_persistent_disk_spec(self) -> pulumi.Output['outputs.RuntimeTemplateDataPersistentDiskSpec']: + """ + The configuration for the data disk of the runtime. + Structure is documented below. + """ + return pulumi.get(self, "data_persistent_disk_spec") + + @property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[str]]: + """ + The description of the Runtime Template. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[str]: + """ + Required. The display name of the Runtime Template. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter(name="encryptionSpec") + def encryption_spec(self) -> pulumi.Output[Optional['outputs.RuntimeTemplateEncryptionSpec']]: + """ + Customer-managed encryption key spec for the notebook runtime. + Structure is documented below. + """ + return pulumi.get(self, "encryption_spec") + + @property + @pulumi.getter(name="eucConfig") + def euc_config(self) -> pulumi.Output[Optional['outputs.RuntimeTemplateEucConfig']]: + """ + EUC configuration of the NotebookRuntimeTemplate. + Structure is documented below. + """ + return pulumi.get(self, "euc_config") + + @property + @pulumi.getter(name="idleShutdownConfig") + def idle_shutdown_config(self) -> pulumi.Output['outputs.RuntimeTemplateIdleShutdownConfig']: + """ + Notebook Idle Shutdown configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "idle_shutdown_config") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Labels to identify and group the runtime template. + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location for the resource: https://cloud.google.com/colab/docs/locations + + + - - - + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="machineSpec") + def machine_spec(self) -> pulumi.Output['outputs.RuntimeTemplateMachineSpec']: + """ + 'The machine configuration of the runtime.' + Structure is documented below. + """ + return pulumi.get(self, "machine_spec") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the Runtime Template + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="networkSpec") + def network_spec(self) -> pulumi.Output['outputs.RuntimeTemplateNetworkSpec']: + """ + The network configuration for the runtime. + Structure is documented below. + """ + return pulumi.get(self, "network_spec") + + @property + @pulumi.getter(name="networkTags") + def network_tags(self) -> pulumi.Output[Optional[Sequence[str]]]: + """ + Applies the given Compute Engine tags to the runtime. + """ + return pulumi.get(self, "network_tags") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="shieldedVmConfig") + def shielded_vm_config(self) -> pulumi.Output[Optional['outputs.RuntimeTemplateShieldedVmConfig']]: + """ + Runtime Shielded VM spec. + Structure is documented below. + """ + return pulumi.get(self, "shielded_vm_config") + diff --git a/sdk/python/pulumi_gcp/compute/_inputs.py b/sdk/python/pulumi_gcp/compute/_inputs.py index ce1f9e6093..67af08a47d 100644 --- a/sdk/python/pulumi_gcp/compute/_inputs.py +++ b/sdk/python/pulumi_gcp/compute/_inputs.py @@ -16707,7 +16707,7 @@ class InstanceNetworkInterfaceArgsDict(TypedDict): """ stack_type: NotRequired[pulumi.Input[str]] """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ subnetwork: NotRequired[pulumi.Input[str]] """ @@ -16771,7 +16771,7 @@ def __init__(__self__, *, :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. - :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param pulumi.Input[str] subnetwork: The name or self_link of the subnetwork to attach this interface to. Either `network` or `subnetwork` must be provided. If network isn't provided it will be inferred from the subnetwork. The subnetwork must exist in the same region this @@ -16986,7 +16986,7 @@ def security_policy(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="stackType") def stack_type(self) -> Optional[pulumi.Input[str]]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") @@ -19290,7 +19290,7 @@ class InstanceTemplateNetworkInterfaceArgsDict(TypedDict): """ stack_type: NotRequired[pulumi.Input[str]] """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ subnetwork: NotRequired[pulumi.Input[str]] """ @@ -19350,7 +19350,7 @@ def __init__(__self__, *, empty, the address will be automatically assigned. :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. - :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param pulumi.Input[str] subnetwork: the name of the subnetwork to attach this interface to. The subnetwork must exist in the same `region` this instance will be created in. Either `network` or `subnetwork` must be provided. @@ -19549,7 +19549,7 @@ def queue_count(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="stackType") def stack_type(self) -> Optional[pulumi.Input[str]]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") @@ -32902,7 +32902,7 @@ class RegionInstanceTemplateNetworkInterfaceArgsDict(TypedDict): """ stack_type: NotRequired[pulumi.Input[str]] """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ subnetwork: NotRequired[pulumi.Input[str]] """ @@ -32953,7 +32953,7 @@ def __init__(__self__, *, empty, the address will be automatically assigned. :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. - :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param pulumi.Input[str] subnetwork: the name of the subnetwork to attach this interface to. The subnetwork must exist in the same `region` this instance will be created in. Either `network` or `subnetwork` must be provided. @@ -33129,7 +33129,7 @@ def queue_count(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="stackType") def stack_type(self) -> Optional[pulumi.Input[str]]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") diff --git a/sdk/python/pulumi_gcp/compute/interconnect_attachment.py b/sdk/python/pulumi_gcp/compute/interconnect_attachment.py index 2d3783c7e4..56bb7bcbb1 100644 --- a/sdk/python/pulumi_gcp/compute/interconnect_attachment.py +++ b/sdk/python/pulumi_gcp/compute/interconnect_attachment.py @@ -51,7 +51,7 @@ def __init__(__self__, *, For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. :param pulumi.Input[Sequence[pulumi.Input[str]]] candidate_subnets: Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) @@ -199,7 +199,7 @@ def bandwidth(self) -> Optional[pulumi.Input[str]]: For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. """ return pulumi.get(self, "bandwidth") @@ -477,7 +477,7 @@ def __init__(__self__, *, For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. :param pulumi.Input[Sequence[pulumi.Input[str]]] candidate_subnets: Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) @@ -659,7 +659,7 @@ def bandwidth(self) -> Optional[pulumi.Input[str]]: For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. """ return pulumi.get(self, "bandwidth") @@ -1177,7 +1177,7 @@ def __init__(__self__, For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. :param pulumi.Input[Sequence[pulumi.Input[str]]] candidate_subnets: Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) @@ -1477,7 +1477,7 @@ def get(resource_name: str, For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. :param pulumi.Input[Sequence[pulumi.Input[str]]] candidate_subnets: Up to 16 candidate prefixes that can be used to restrict the allocation of cloudRouterIpAddress and customerRouterIpAddress for this attachment. All prefixes must be within link-local address space (169.254.0.0/16) @@ -1632,7 +1632,7 @@ def bandwidth(self) -> pulumi.Output[str]: For attachments of type PARTNER, the Google Partner that is operating the interconnect must set the bandwidth. Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED, Defaults to BPS_10G - Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`. + Possible values are: `BPS_50M`, `BPS_100M`, `BPS_200M`, `BPS_300M`, `BPS_400M`, `BPS_500M`, `BPS_1G`, `BPS_2G`, `BPS_5G`, `BPS_10G`, `BPS_20G`, `BPS_50G`, `BPS_100G`. """ return pulumi.get(self, "bandwidth") diff --git a/sdk/python/pulumi_gcp/compute/outputs.py b/sdk/python/pulumi_gcp/compute/outputs.py index a3c30fdeea..1f3be0a742 100644 --- a/sdk/python/pulumi_gcp/compute/outputs.py +++ b/sdk/python/pulumi_gcp/compute/outputs.py @@ -12415,7 +12415,7 @@ def __init__(__self__, *, :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. - :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param str subnetwork: The name or self_link of the subnetwork to attach this interface to. Either `network` or `subnetwork` must be provided. If network isn't provided it will be inferred from the subnetwork. The subnetwork must exist in the same region this @@ -12578,7 +12578,7 @@ def security_policy(self) -> Optional[str]: @pulumi.getter(name="stackType") def stack_type(self) -> Optional[str]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") @@ -14372,7 +14372,7 @@ def __init__(__self__, *, empty, the address will be automatically assigned. :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. - :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface to. The subnetwork must exist in the same `region` this instance will be created in. Either `network` or `subnetwork` must be provided. @@ -14523,7 +14523,7 @@ def queue_count(self) -> Optional[int]: @pulumi.getter(name="stackType") def stack_type(self) -> Optional[str]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") @@ -24540,7 +24540,7 @@ def __init__(__self__, *, empty, the address will be automatically assigned. :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. - :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface to. The subnetwork must exist in the same `region` this instance will be created in. Either `network` or `subnetwork` must be provided. @@ -24672,7 +24672,7 @@ def queue_count(self) -> Optional[int]: @pulumi.getter(name="stackType") def stack_type(self) -> Optional[str]: """ - The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. + The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6, IPV6_ONLY or IPV4_ONLY. If not specified, IPV4_ONLY will be used. """ return pulumi.get(self, "stack_type") diff --git a/sdk/python/pulumi_gcp/compute/route.py b/sdk/python/pulumi_gcp/compute/route.py index cb1d47b051..50c61b0112 100644 --- a/sdk/python/pulumi_gcp/compute/route.py +++ b/sdk/python/pulumi_gcp/compute/route.py @@ -382,13 +382,11 @@ def __init__(__self__, *, specified) The zone of the instance specified in `next_hop_instance`. Omit if `next_hop_instance` is specified as a URL. - :param pulumi.Input[str] next_hop_inter_region_cost: Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - distance, and available bandwidth between regions. + :param pulumi.Input[str] next_hop_inter_region_cost: Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. :param pulumi.Input[str] next_hop_ip: Network IP address of an instance that should handle matching packets. :param pulumi.Input[str] next_hop_med: Multi-Exit Discriminator, a BGP route metric that indicates the desirability of a particular route in a network. :param pulumi.Input[str] next_hop_network: URL to a Network that should handle matching packets. - :param pulumi.Input[str] next_hop_origin: Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - INCOMPLETE. + :param pulumi.Input[str] next_hop_origin: Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. :param pulumi.Input[str] next_hop_vpn_tunnel: URL to a VpnTunnel that should handle matching packets. :param pulumi.Input[int] priority: The priority of this route. Priority is used to break ties in cases where there is more than one matching route of equal prefix length. @@ -574,8 +572,7 @@ def next_hop_instance_zone(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nextHopInterRegionCost") def next_hop_inter_region_cost(self) -> Optional[pulumi.Input[str]]: """ - Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - distance, and available bandwidth between regions. + Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. """ return pulumi.get(self, "next_hop_inter_region_cost") @@ -623,8 +620,7 @@ def next_hop_network(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nextHopOrigin") def next_hop_origin(self) -> Optional[pulumi.Input[str]]: """ - Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - INCOMPLETE. + Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. """ return pulumi.get(self, "next_hop_origin") @@ -1270,13 +1266,11 @@ def get(resource_name: str, specified) The zone of the instance specified in `next_hop_instance`. Omit if `next_hop_instance` is specified as a URL. - :param pulumi.Input[str] next_hop_inter_region_cost: Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - distance, and available bandwidth between regions. + :param pulumi.Input[str] next_hop_inter_region_cost: Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. :param pulumi.Input[str] next_hop_ip: Network IP address of an instance that should handle matching packets. :param pulumi.Input[str] next_hop_med: Multi-Exit Discriminator, a BGP route metric that indicates the desirability of a particular route in a network. :param pulumi.Input[str] next_hop_network: URL to a Network that should handle matching packets. - :param pulumi.Input[str] next_hop_origin: Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - INCOMPLETE. + :param pulumi.Input[str] next_hop_origin: Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. :param pulumi.Input[str] next_hop_vpn_tunnel: URL to a VpnTunnel that should handle matching packets. :param pulumi.Input[int] priority: The priority of this route. Priority is used to break ties in cases where there is more than one matching route of equal prefix length. @@ -1417,8 +1411,7 @@ def next_hop_instance_zone(self) -> pulumi.Output[str]: @pulumi.getter(name="nextHopInterRegionCost") def next_hop_inter_region_cost(self) -> pulumi.Output[str]: """ - Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, - distance, and available bandwidth between regions. + Internal fixed region-to-region cost that Google Cloud calculates based on factors such as network performance, distance, and available bandwidth between regions. """ return pulumi.get(self, "next_hop_inter_region_cost") @@ -1450,8 +1443,7 @@ def next_hop_network(self) -> pulumi.Output[str]: @pulumi.getter(name="nextHopOrigin") def next_hop_origin(self) -> pulumi.Output[str]: """ - Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or - INCOMPLETE. + Indicates the origin of the route. Can be IGP (Interior Gateway Protocol), EGP (Exterior Gateway Protocol), or INCOMPLETE. """ return pulumi.get(self, "next_hop_origin") diff --git a/sdk/python/pulumi_gcp/compute/subnetwork.py b/sdk/python/pulumi_gcp/compute/subnetwork.py index 64c63e5a86..c6ec0d4c24 100644 --- a/sdk/python/pulumi_gcp/compute/subnetwork.py +++ b/sdk/python/pulumi_gcp/compute/subnetwork.py @@ -109,7 +109,7 @@ def __init__(__self__, *, Defaults to false. :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. """ pulumi.set(__self__, "network", network) if allow_subnet_cidr_routes_overlap is not None: @@ -406,7 +406,7 @@ def stack_type(self) -> Optional[pulumi.Input[str]]: """ The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. """ return pulumi.get(self, "stack_type") @@ -520,7 +520,7 @@ def __init__(__self__, *, Defaults to false. :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. :param pulumi.Input[int] subnetwork_id: The unique identifier number for the resource. This identifier is defined by the server. """ if allow_subnet_cidr_routes_overlap is not None: @@ -910,7 +910,7 @@ def stack_type(self) -> Optional[pulumi.Input[str]]: """ The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. """ return pulumi.get(self, "stack_type") @@ -1267,7 +1267,7 @@ def __init__(__self__, Defaults to false. :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. """ ... @overload @@ -1703,7 +1703,7 @@ def get(resource_name: str, Defaults to false. :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. :param pulumi.Input[int] subnetwork_id: The unique identifier number for the resource. This identifier is defined by the server. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -1978,7 +1978,7 @@ def stack_type(self) -> pulumi.Output[str]: """ The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. - Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + Possible values are: `IPV4_ONLY`, `IPV4_IPV6`, `IPV6_ONLY`. """ return pulumi.get(self, "stack_type") diff --git a/sdk/python/pulumi_gcp/compute/target_instance.py b/sdk/python/pulumi_gcp/compute/target_instance.py index 25ced313b7..73d751fa27 100644 --- a/sdk/python/pulumi_gcp/compute/target_instance.py +++ b/sdk/python/pulumi_gcp/compute/target_instance.py @@ -507,7 +507,7 @@ def __init__(__self__, }) policyddosprotection = gcp.compute.RegionSecurityPolicy("policyddosprotection", region="southamerica-west1", - name="tf-test-policyddos_85794", + name="tf-test-policyddos_21197", description="ddos protection security policy to set target instance", type="CLOUD_ARMOR_NETWORK", ddos_protection_config={ @@ -515,7 +515,7 @@ def __init__(__self__, }) edge_sec_service = gcp.compute.NetworkEdgeSecurityService("edge_sec_service", region="southamerica-west1", - name="tf-test-edgesec_21197", + name="tf-test-edgesec_52865", security_policy=policyddosprotection.self_link) regionsecuritypolicy = gcp.compute.RegionSecurityPolicy("regionsecuritypolicy", name="region-secpolicy", @@ -697,7 +697,7 @@ def __init__(__self__, }) policyddosprotection = gcp.compute.RegionSecurityPolicy("policyddosprotection", region="southamerica-west1", - name="tf-test-policyddos_85794", + name="tf-test-policyddos_21197", description="ddos protection security policy to set target instance", type="CLOUD_ARMOR_NETWORK", ddos_protection_config={ @@ -705,7 +705,7 @@ def __init__(__self__, }) edge_sec_service = gcp.compute.NetworkEdgeSecurityService("edge_sec_service", region="southamerica-west1", - name="tf-test-edgesec_21197", + name="tf-test-edgesec_52865", security_policy=policyddosprotection.self_link) regionsecuritypolicy = gcp.compute.RegionSecurityPolicy("regionsecuritypolicy", name="region-secpolicy", diff --git a/sdk/python/pulumi_gcp/compute/url_map.py b/sdk/python/pulumi_gcp/compute/url_map.py index ecf12a7640..c98dd65ee3 100644 --- a/sdk/python/pulumi_gcp/compute/url_map.py +++ b/sdk/python/pulumi_gcp/compute/url_map.py @@ -612,6 +612,8 @@ def __init__(__self__, To get more information about UrlMap, see: * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) + * How-to Guides + * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) ## Example Usage @@ -1350,6 +1352,8 @@ def __init__(__self__, To get more information about UrlMap, see: * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/urlMaps) + * How-to Guides + * [Official Documentation](https://cloud.google.com/load-balancing/docs/url-map-concepts) ## Example Usage diff --git a/sdk/python/pulumi_gcp/config/__init__.pyi b/sdk/python/pulumi_gcp/config/__init__.pyi index 93fa62a525..41cd2a9904 100644 --- a/sdk/python/pulumi_gcp/config/__init__.pyi +++ b/sdk/python/pulumi_gcp/config/__init__.pyi @@ -109,6 +109,8 @@ clouddomainsCustomEndpoint: Optional[str] cloudfunctions2CustomEndpoint: Optional[str] +colabCustomEndpoint: Optional[str] + composerCustomEndpoint: Optional[str] computeCustomEndpoint: Optional[str] @@ -279,6 +281,10 @@ osLoginCustomEndpoint: Optional[str] parallelstoreCustomEndpoint: Optional[str] +parameterManagerCustomEndpoint: Optional[str] + +parameterManagerRegionalCustomEndpoint: Optional[str] + privatecaCustomEndpoint: Optional[str] privilegedAccessManagerCustomEndpoint: Optional[str] diff --git a/sdk/python/pulumi_gcp/config/vars.py b/sdk/python/pulumi_gcp/config/vars.py index 1da02804fe..a0f350d7ea 100644 --- a/sdk/python/pulumi_gcp/config/vars.py +++ b/sdk/python/pulumi_gcp/config/vars.py @@ -209,6 +209,10 @@ def clouddomains_custom_endpoint(self) -> Optional[str]: def cloudfunctions2_custom_endpoint(self) -> Optional[str]: return __config__.get('cloudfunctions2CustomEndpoint') + @property + def colab_custom_endpoint(self) -> Optional[str]: + return __config__.get('colabCustomEndpoint') + @property def composer_custom_endpoint(self) -> Optional[str]: return __config__.get('composerCustomEndpoint') @@ -549,6 +553,14 @@ def os_login_custom_endpoint(self) -> Optional[str]: def parallelstore_custom_endpoint(self) -> Optional[str]: return __config__.get('parallelstoreCustomEndpoint') + @property + def parameter_manager_custom_endpoint(self) -> Optional[str]: + return __config__.get('parameterManagerCustomEndpoint') + + @property + def parameter_manager_regional_custom_endpoint(self) -> Optional[str]: + return __config__.get('parameterManagerRegionalCustomEndpoint') + @property def privateca_custom_endpoint(self) -> Optional[str]: return __config__.get('privatecaCustomEndpoint') diff --git a/sdk/python/pulumi_gcp/databasemigrationservice/connection_profile.py b/sdk/python/pulumi_gcp/databasemigrationservice/connection_profile.py index 65e370a90f..e84e8dcca8 100644 --- a/sdk/python/pulumi_gcp/databasemigrationservice/connection_profile.py +++ b/sdk/python/pulumi_gcp/databasemigrationservice/connection_profile.py @@ -710,11 +710,11 @@ def __init__(__self__, "foo": "bar", }, alloydb={ - "cluster_id": "tf-test-dbmsalloycluster_52865", + "cluster_id": "tf-test-dbmsalloycluster_85840", "settings": { "initial_user": { - "user": "alloyuser_85840", - "password": "alloypass_60302", + "user": "alloyuser_60302", + "password": "alloypass_22811", }, "vpc_network": default.id, "labels": { @@ -1070,11 +1070,11 @@ def __init__(__self__, "foo": "bar", }, alloydb={ - "cluster_id": "tf-test-dbmsalloycluster_52865", + "cluster_id": "tf-test-dbmsalloycluster_85840", "settings": { "initial_user": { - "user": "alloyuser_85840", - "password": "alloypass_60302", + "user": "alloyuser_60302", + "password": "alloypass_22811", }, "vpc_network": default.id, "labels": { diff --git a/sdk/python/pulumi_gcp/dataplex/entry_type.py b/sdk/python/pulumi_gcp/dataplex/entry_type.py index be870439c7..4926b560f0 100644 --- a/sdk/python/pulumi_gcp/dataplex/entry_type.py +++ b/sdk/python/pulumi_gcp/dataplex/entry_type.py @@ -511,7 +511,7 @@ def __init__(__self__, import pulumi_gcp as gcp test_entry_type_full = gcp.dataplex.AspectType("test_entry_type_full", - aspect_type_id="tf-test-aspect-type_22811", + aspect_type_id="tf-test-aspect-type_91042", location="us-central1", project="my-project-name", metadata_template=\"\"\"{ @@ -630,7 +630,7 @@ def __init__(__self__, import pulumi_gcp as gcp test_entry_type_full = gcp.dataplex.AspectType("test_entry_type_full", - aspect_type_id="tf-test-aspect-type_22811", + aspect_type_id="tf-test-aspect-type_91042", location="us-central1", project="my-project-name", metadata_template=\"\"\"{ diff --git a/sdk/python/pulumi_gcp/dataplex/task.py b/sdk/python/pulumi_gcp/dataplex/task.py index 93e0ae6cff..73b1ddbcfb 100644 --- a/sdk/python/pulumi_gcp/dataplex/task.py +++ b/sdk/python/pulumi_gcp/dataplex/task.py @@ -572,11 +572,11 @@ def __init__(__self__, project = gcp.organizations.get_project() example = gcp.dataplex.Lake("example", - name="tf-test-lake_91042", + name="tf-test-lake_72490", location="us-central1", project="my-project-name") example_task = gcp.dataplex.Task("example", - task_id="tf-test-task_72490", + task_id="tf-test-task_89605", location="us-central1", lake=example.name, description="Test Task Basic", @@ -610,15 +610,15 @@ def __init__(__self__, # VPC network default = gcp.compute.Network("default", - name="tf-test-workstation-cluster_89605", + name="tf-test-workstation-cluster_56730", auto_create_subnetworks=True) project = gcp.organizations.get_project() example_spark = gcp.dataplex.Lake("example_spark", - name="tf-test-lake_56730", + name="tf-test-lake_95154", location="us-central1", project="my-project-name") example_spark_task = gcp.dataplex.Task("example_spark", - task_id="tf-test-task_95154", + task_id="tf-test-task_64336", location="us-central1", lake=example_spark.name, trigger_spec={ @@ -666,15 +666,15 @@ def __init__(__self__, # VPC network default = gcp.compute.Network("default", - name="tf-test-workstation-cluster_64336", + name="tf-test-workstation-cluster_34962", auto_create_subnetworks=True) project = gcp.organizations.get_project() example_notebook = gcp.dataplex.Lake("example_notebook", - name="tf-test-lake_34962", + name="tf-test-lake_74000", location="us-central1", project="my-project-name") example_notebook_task = gcp.dataplex.Task("example_notebook", - task_id="tf-test-task_74000", + task_id="tf-test-task_75125", location="us-central1", lake=example_notebook.name, trigger_spec={ @@ -782,11 +782,11 @@ def __init__(__self__, project = gcp.organizations.get_project() example = gcp.dataplex.Lake("example", - name="tf-test-lake_91042", + name="tf-test-lake_72490", location="us-central1", project="my-project-name") example_task = gcp.dataplex.Task("example", - task_id="tf-test-task_72490", + task_id="tf-test-task_89605", location="us-central1", lake=example.name, description="Test Task Basic", @@ -820,15 +820,15 @@ def __init__(__self__, # VPC network default = gcp.compute.Network("default", - name="tf-test-workstation-cluster_89605", + name="tf-test-workstation-cluster_56730", auto_create_subnetworks=True) project = gcp.organizations.get_project() example_spark = gcp.dataplex.Lake("example_spark", - name="tf-test-lake_56730", + name="tf-test-lake_95154", location="us-central1", project="my-project-name") example_spark_task = gcp.dataplex.Task("example_spark", - task_id="tf-test-task_95154", + task_id="tf-test-task_64336", location="us-central1", lake=example_spark.name, trigger_spec={ @@ -876,15 +876,15 @@ def __init__(__self__, # VPC network default = gcp.compute.Network("default", - name="tf-test-workstation-cluster_64336", + name="tf-test-workstation-cluster_34962", auto_create_subnetworks=True) project = gcp.organizations.get_project() example_notebook = gcp.dataplex.Lake("example_notebook", - name="tf-test-lake_34962", + name="tf-test-lake_74000", location="us-central1", project="my-project-name") example_notebook_task = gcp.dataplex.Task("example_notebook", - task_id="tf-test-task_74000", + task_id="tf-test-task_75125", location="us-central1", lake=example_notebook.name, trigger_spec={ diff --git a/sdk/python/pulumi_gcp/dataproc/batch.py b/sdk/python/pulumi_gcp/dataproc/batch.py index 066b128e0a..15ac2710ac 100644 --- a/sdk/python/pulumi_gcp/dataproc/batch.py +++ b/sdk/python/pulumi_gcp/dataproc/batch.py @@ -635,7 +635,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_spark = gcp.dataproc.Batch("example_batch_spark", - batch_id="tf-test-batch_75125", + batch_id="tf-test-batch_88722", location="us-central1", labels={ "batch_test": "terraform", @@ -755,7 +755,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_sparsql = gcp.dataproc.Batch("example_batch_sparsql", - batch_id="tf-test-batch_88722", + batch_id="tf-test-batch_39249", location="us-central1", runtime_config={ "properties": { @@ -783,7 +783,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_pyspark = gcp.dataproc.Batch("example_batch_pyspark", - batch_id="tf-test-batch_39249", + batch_id="tf-test-batch_74391", location="us-central1", runtime_config={ "properties": { @@ -816,7 +816,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_sparkr = gcp.dataproc.Batch("example_batch_sparkr", - batch_id="tf-test-batch_74391", + batch_id="tf-test-batch_16511", location="us-central1", labels={ "batch_test": "terraform", @@ -846,7 +846,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_autotuning = gcp.dataproc.Batch("example_batch_autotuning", - batch_id="tf-test-batch_16511", + batch_id="tf-test-batch_8493", location="us-central1", labels={ "batch_test": "terraform", @@ -951,7 +951,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_spark = gcp.dataproc.Batch("example_batch_spark", - batch_id="tf-test-batch_75125", + batch_id="tf-test-batch_88722", location="us-central1", labels={ "batch_test": "terraform", @@ -1071,7 +1071,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_sparsql = gcp.dataproc.Batch("example_batch_sparsql", - batch_id="tf-test-batch_88722", + batch_id="tf-test-batch_39249", location="us-central1", runtime_config={ "properties": { @@ -1099,7 +1099,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_pyspark = gcp.dataproc.Batch("example_batch_pyspark", - batch_id="tf-test-batch_39249", + batch_id="tf-test-batch_74391", location="us-central1", runtime_config={ "properties": { @@ -1132,7 +1132,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_sparkr = gcp.dataproc.Batch("example_batch_sparkr", - batch_id="tf-test-batch_74391", + batch_id="tf-test-batch_16511", location="us-central1", labels={ "batch_test": "terraform", @@ -1162,7 +1162,7 @@ def __init__(__self__, import pulumi_gcp as gcp example_batch_autotuning = gcp.dataproc.Batch("example_batch_autotuning", - batch_id="tf-test-batch_16511", + batch_id="tf-test-batch_8493", location="us-central1", labels={ "batch_test": "terraform", diff --git a/sdk/python/pulumi_gcp/discoveryengine/_inputs.py b/sdk/python/pulumi_gcp/discoveryengine/_inputs.py index 470b00d12d..d80577c76c 100644 --- a/sdk/python/pulumi_gcp/discoveryengine/_inputs.py +++ b/sdk/python/pulumi_gcp/discoveryengine/_inputs.py @@ -23,6 +23,8 @@ 'ChatEngineChatEngineMetadataArgsDict', 'ChatEngineCommonConfigArgs', 'ChatEngineCommonConfigArgsDict', + 'DataStoreAdvancedSiteSearchConfigArgs', + 'DataStoreAdvancedSiteSearchConfigArgsDict', 'DataStoreDocumentProcessingConfigArgs', 'DataStoreDocumentProcessingConfigArgsDict', 'DataStoreDocumentProcessingConfigChunkingConfigArgs', @@ -283,6 +285,58 @@ def company_name(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "company_name", value) +if not MYPY: + class DataStoreAdvancedSiteSearchConfigArgsDict(TypedDict): + disable_automatic_refresh: NotRequired[pulumi.Input[bool]] + """ + If set true, automatic refresh is disabled for the DataStore. + """ + disable_initial_index: NotRequired[pulumi.Input[bool]] + """ + If set true, initial indexing is disabled for the DataStore. + """ +elif False: + DataStoreAdvancedSiteSearchConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class DataStoreAdvancedSiteSearchConfigArgs: + def __init__(__self__, *, + disable_automatic_refresh: Optional[pulumi.Input[bool]] = None, + disable_initial_index: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] disable_automatic_refresh: If set true, automatic refresh is disabled for the DataStore. + :param pulumi.Input[bool] disable_initial_index: If set true, initial indexing is disabled for the DataStore. + """ + if disable_automatic_refresh is not None: + pulumi.set(__self__, "disable_automatic_refresh", disable_automatic_refresh) + if disable_initial_index is not None: + pulumi.set(__self__, "disable_initial_index", disable_initial_index) + + @property + @pulumi.getter(name="disableAutomaticRefresh") + def disable_automatic_refresh(self) -> Optional[pulumi.Input[bool]]: + """ + If set true, automatic refresh is disabled for the DataStore. + """ + return pulumi.get(self, "disable_automatic_refresh") + + @disable_automatic_refresh.setter + def disable_automatic_refresh(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disable_automatic_refresh", value) + + @property + @pulumi.getter(name="disableInitialIndex") + def disable_initial_index(self) -> Optional[pulumi.Input[bool]]: + """ + If set true, initial indexing is disabled for the DataStore. + """ + return pulumi.get(self, "disable_initial_index") + + @disable_initial_index.setter + def disable_initial_index(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disable_initial_index", value) + + if not MYPY: class DataStoreDocumentProcessingConfigArgsDict(TypedDict): chunking_config: NotRequired[pulumi.Input['DataStoreDocumentProcessingConfigChunkingConfigArgsDict']] diff --git a/sdk/python/pulumi_gcp/discoveryengine/data_store.py b/sdk/python/pulumi_gcp/discoveryengine/data_store.py index bb73aa27a4..89bbb94dff 100644 --- a/sdk/python/pulumi_gcp/discoveryengine/data_store.py +++ b/sdk/python/pulumi_gcp/discoveryengine/data_store.py @@ -26,6 +26,7 @@ def __init__(__self__, *, display_name: pulumi.Input[str], industry_vertical: pulumi.Input[str], location: pulumi.Input[str], + advanced_site_search_config: Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']] = None, create_advanced_site_search: Optional[pulumi.Input[bool]] = None, document_processing_config: Optional[pulumi.Input['DataStoreDocumentProcessingConfigArgs']] = None, project: Optional[pulumi.Input[str]] = None, @@ -45,6 +46,8 @@ def __init__(__self__, *, Possible values are: `GENERIC`, `MEDIA`, `HEALTHCARE_FHIR`. :param pulumi.Input[str] location: The geographic location where the data store should reside. The value can only be one of "global", "us" and "eu". + :param pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs'] advanced_site_search_config: Configuration data for advance site search. + Structure is documented below. :param pulumi.Input[bool] create_advanced_site_search: If true, an advanced data store for site search will be created. If the data store is not configured as site search (GENERIC vertical and PUBLIC_WEBSITE contentConfig), this flag will be ignored. @@ -67,6 +70,8 @@ def __init__(__self__, *, pulumi.set(__self__, "display_name", display_name) pulumi.set(__self__, "industry_vertical", industry_vertical) pulumi.set(__self__, "location", location) + if advanced_site_search_config is not None: + pulumi.set(__self__, "advanced_site_search_config", advanced_site_search_config) if create_advanced_site_search is not None: pulumi.set(__self__, "create_advanced_site_search", create_advanced_site_search) if document_processing_config is not None: @@ -145,6 +150,19 @@ def location(self) -> pulumi.Input[str]: def location(self, value: pulumi.Input[str]): pulumi.set(self, "location", value) + @property + @pulumi.getter(name="advancedSiteSearchConfig") + def advanced_site_search_config(self) -> Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']]: + """ + Configuration data for advance site search. + Structure is documented below. + """ + return pulumi.get(self, "advanced_site_search_config") + + @advanced_site_search_config.setter + def advanced_site_search_config(self, value: Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']]): + pulumi.set(self, "advanced_site_search_config", value) + @property @pulumi.getter(name="createAdvancedSiteSearch") def create_advanced_site_search(self) -> Optional[pulumi.Input[bool]]: @@ -220,6 +238,7 @@ def solution_types(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str] @pulumi.input_type class _DataStoreState: def __init__(__self__, *, + advanced_site_search_config: Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']] = None, content_config: Optional[pulumi.Input[str]] = None, create_advanced_site_search: Optional[pulumi.Input[bool]] = None, create_time: Optional[pulumi.Input[str]] = None, @@ -235,6 +254,8 @@ def __init__(__self__, *, solution_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): """ Input properties used for looking up and filtering DataStore resources. + :param pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs'] advanced_site_search_config: Configuration data for advance site search. + Structure is documented below. :param pulumi.Input[str] content_config: The content config of the data store. Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. :param pulumi.Input[bool] create_advanced_site_search: If true, an advanced data store for site search will be created. If the @@ -270,6 +291,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] solution_types: The solutions that the data store enrolls. Each value may be one of: `SOLUTION_TYPE_RECOMMENDATION`, `SOLUTION_TYPE_SEARCH`, `SOLUTION_TYPE_CHAT`, `SOLUTION_TYPE_GENERATIVE_CHAT`. """ + if advanced_site_search_config is not None: + pulumi.set(__self__, "advanced_site_search_config", advanced_site_search_config) if content_config is not None: pulumi.set(__self__, "content_config", content_config) if create_advanced_site_search is not None: @@ -297,6 +320,19 @@ def __init__(__self__, *, if solution_types is not None: pulumi.set(__self__, "solution_types", solution_types) + @property + @pulumi.getter(name="advancedSiteSearchConfig") + def advanced_site_search_config(self) -> Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']]: + """ + Configuration data for advance site search. + Structure is documented below. + """ + return pulumi.get(self, "advanced_site_search_config") + + @advanced_site_search_config.setter + def advanced_site_search_config(self, value: Optional[pulumi.Input['DataStoreAdvancedSiteSearchConfigArgs']]): + pulumi.set(self, "advanced_site_search_config", value) + @property @pulumi.getter(name="contentConfig") def content_config(self) -> Optional[pulumi.Input[str]]: @@ -480,6 +516,7 @@ class DataStore(pulumi.CustomResource): def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, + advanced_site_search_config: Optional[pulumi.Input[Union['DataStoreAdvancedSiteSearchConfigArgs', 'DataStoreAdvancedSiteSearchConfigArgsDict']]] = None, content_config: Optional[pulumi.Input[str]] = None, create_advanced_site_search: Optional[pulumi.Input[bool]] = None, data_store_id: Optional[pulumi.Input[str]] = None, @@ -546,6 +583,26 @@ def __init__(__self__, }], }) ``` + ### Discoveryengine Datastore Advanced Site Search Config + + ```python + import pulumi + import pulumi_gcp as gcp + + advanced_site_search_config = gcp.discoveryengine.DataStore("advanced_site_search_config", + location="global", + data_store_id="data-store-id", + display_name="tf-test-advanced-site-search-config-datastore", + industry_vertical="GENERIC", + content_config="PUBLIC_WEBSITE", + solution_types=["SOLUTION_TYPE_CHAT"], + create_advanced_site_search=True, + skip_default_schema_creation=False, + advanced_site_search_config={ + "disable_initial_index": True, + "disable_automatic_refresh": True, + }) + ``` ## Import @@ -573,6 +630,8 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['DataStoreAdvancedSiteSearchConfigArgs', 'DataStoreAdvancedSiteSearchConfigArgsDict']] advanced_site_search_config: Configuration data for advance site search. + Structure is documented below. :param pulumi.Input[str] content_config: The content config of the data store. Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. :param pulumi.Input[bool] create_advanced_site_search: If true, an advanced data store for site search will be created. If the @@ -663,6 +722,26 @@ def __init__(__self__, }], }) ``` + ### Discoveryengine Datastore Advanced Site Search Config + + ```python + import pulumi + import pulumi_gcp as gcp + + advanced_site_search_config = gcp.discoveryengine.DataStore("advanced_site_search_config", + location="global", + data_store_id="data-store-id", + display_name="tf-test-advanced-site-search-config-datastore", + industry_vertical="GENERIC", + content_config="PUBLIC_WEBSITE", + solution_types=["SOLUTION_TYPE_CHAT"], + create_advanced_site_search=True, + skip_default_schema_creation=False, + advanced_site_search_config={ + "disable_initial_index": True, + "disable_automatic_refresh": True, + }) + ``` ## Import @@ -703,6 +782,7 @@ def __init__(__self__, resource_name: str, *args, **kwargs): def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, + advanced_site_search_config: Optional[pulumi.Input[Union['DataStoreAdvancedSiteSearchConfigArgs', 'DataStoreAdvancedSiteSearchConfigArgsDict']]] = None, content_config: Optional[pulumi.Input[str]] = None, create_advanced_site_search: Optional[pulumi.Input[bool]] = None, data_store_id: Optional[pulumi.Input[str]] = None, @@ -722,6 +802,7 @@ def _internal_init(__self__, raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') __props__ = DataStoreArgs.__new__(DataStoreArgs) + __props__.__dict__["advanced_site_search_config"] = advanced_site_search_config if content_config is None and not opts.urn: raise TypeError("Missing required property 'content_config'") __props__.__dict__["content_config"] = content_config @@ -755,6 +836,7 @@ def _internal_init(__self__, def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, + advanced_site_search_config: Optional[pulumi.Input[Union['DataStoreAdvancedSiteSearchConfigArgs', 'DataStoreAdvancedSiteSearchConfigArgsDict']]] = None, content_config: Optional[pulumi.Input[str]] = None, create_advanced_site_search: Optional[pulumi.Input[bool]] = None, create_time: Optional[pulumi.Input[str]] = None, @@ -775,6 +857,8 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['DataStoreAdvancedSiteSearchConfigArgs', 'DataStoreAdvancedSiteSearchConfigArgsDict']] advanced_site_search_config: Configuration data for advance site search. + Structure is documented below. :param pulumi.Input[str] content_config: The content config of the data store. Possible values are: `NO_CONTENT`, `CONTENT_REQUIRED`, `PUBLIC_WEBSITE`. :param pulumi.Input[bool] create_advanced_site_search: If true, an advanced data store for site search will be created. If the @@ -814,6 +898,7 @@ def get(resource_name: str, __props__ = _DataStoreState.__new__(_DataStoreState) + __props__.__dict__["advanced_site_search_config"] = advanced_site_search_config __props__.__dict__["content_config"] = content_config __props__.__dict__["create_advanced_site_search"] = create_advanced_site_search __props__.__dict__["create_time"] = create_time @@ -829,6 +914,15 @@ def get(resource_name: str, __props__.__dict__["solution_types"] = solution_types return DataStore(resource_name, opts=opts, __props__=__props__) + @property + @pulumi.getter(name="advancedSiteSearchConfig") + def advanced_site_search_config(self) -> pulumi.Output[Optional['outputs.DataStoreAdvancedSiteSearchConfig']]: + """ + Configuration data for advance site search. + Structure is documented below. + """ + return pulumi.get(self, "advanced_site_search_config") + @property @pulumi.getter(name="contentConfig") def content_config(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/discoveryengine/outputs.py b/sdk/python/pulumi_gcp/discoveryengine/outputs.py index fe32c0a67e..54b59e2505 100644 --- a/sdk/python/pulumi_gcp/discoveryengine/outputs.py +++ b/sdk/python/pulumi_gcp/discoveryengine/outputs.py @@ -20,6 +20,7 @@ 'ChatEngineChatEngineConfigAgentCreationConfig', 'ChatEngineChatEngineMetadata', 'ChatEngineCommonConfig', + 'DataStoreAdvancedSiteSearchConfig', 'DataStoreDocumentProcessingConfig', 'DataStoreDocumentProcessingConfigChunkingConfig', 'DataStoreDocumentProcessingConfigChunkingConfigLayoutBasedChunkingConfig', @@ -244,6 +245,56 @@ def company_name(self) -> Optional[str]: return pulumi.get(self, "company_name") +@pulumi.output_type +class DataStoreAdvancedSiteSearchConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "disableAutomaticRefresh": + suggest = "disable_automatic_refresh" + elif key == "disableInitialIndex": + suggest = "disable_initial_index" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in DataStoreAdvancedSiteSearchConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + DataStoreAdvancedSiteSearchConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + DataStoreAdvancedSiteSearchConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + disable_automatic_refresh: Optional[bool] = None, + disable_initial_index: Optional[bool] = None): + """ + :param bool disable_automatic_refresh: If set true, automatic refresh is disabled for the DataStore. + :param bool disable_initial_index: If set true, initial indexing is disabled for the DataStore. + """ + if disable_automatic_refresh is not None: + pulumi.set(__self__, "disable_automatic_refresh", disable_automatic_refresh) + if disable_initial_index is not None: + pulumi.set(__self__, "disable_initial_index", disable_initial_index) + + @property + @pulumi.getter(name="disableAutomaticRefresh") + def disable_automatic_refresh(self) -> Optional[bool]: + """ + If set true, automatic refresh is disabled for the DataStore. + """ + return pulumi.get(self, "disable_automatic_refresh") + + @property + @pulumi.getter(name="disableInitialIndex") + def disable_initial_index(self) -> Optional[bool]: + """ + If set true, initial indexing is disabled for the DataStore. + """ + return pulumi.get(self, "disable_initial_index") + + @pulumi.output_type class DataStoreDocumentProcessingConfig(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/edgenetwork/__init__.py b/sdk/python/pulumi_gcp/edgenetwork/__init__.py index 8078cb1266..895b6b18e9 100644 --- a/sdk/python/pulumi_gcp/edgenetwork/__init__.py +++ b/sdk/python/pulumi_gcp/edgenetwork/__init__.py @@ -5,5 +5,6 @@ from .. import _utilities import typing # Export this package's modules as members: +from .interconnect_attachment import * from .network import * from .subnet import * diff --git a/sdk/python/pulumi_gcp/edgenetwork/interconnect_attachment.py b/sdk/python/pulumi_gcp/edgenetwork/interconnect_attachment.py new file mode 100644 index 0000000000..0fd1fe7f28 --- /dev/null +++ b/sdk/python/pulumi_gcp/edgenetwork/interconnect_attachment.py @@ -0,0 +1,941 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['InterconnectAttachmentArgs', 'InterconnectAttachment'] + +@pulumi.input_type +class InterconnectAttachmentArgs: + def __init__(__self__, *, + interconnect: pulumi.Input[str], + interconnect_attachment_id: pulumi.Input[str], + location: pulumi.Input[str], + network: pulumi.Input[str], + vlan_id: pulumi.Input[int], + zone: pulumi.Input[str], + description: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + mtu: Optional[pulumi.Input[int]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a InterconnectAttachment resource. + :param pulumi.Input[str] interconnect: The ID of the underlying interconnect that this attachment's traffic will traverse through. + :param pulumi.Input[str] interconnect_attachment_id: A unique ID that identifies this interconnect attachment. + + + - - - + :param pulumi.Input[str] location: The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + :param pulumi.Input[str] network: The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + :param pulumi.Input[int] vlan_id: VLAN ID provided by user. Must be site-wise unique. + :param pulumi.Input[str] zone: The name of the target Distributed Cloud Edge zone. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[int] mtu: IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "interconnect", interconnect) + pulumi.set(__self__, "interconnect_attachment_id", interconnect_attachment_id) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "network", network) + pulumi.set(__self__, "vlan_id", vlan_id) + pulumi.set(__self__, "zone", zone) + if description is not None: + pulumi.set(__self__, "description", description) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if mtu is not None: + pulumi.set(__self__, "mtu", mtu) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def interconnect(self) -> pulumi.Input[str]: + """ + The ID of the underlying interconnect that this attachment's traffic will traverse through. + """ + return pulumi.get(self, "interconnect") + + @interconnect.setter + def interconnect(self, value: pulumi.Input[str]): + pulumi.set(self, "interconnect", value) + + @property + @pulumi.getter(name="interconnectAttachmentId") + def interconnect_attachment_id(self) -> pulumi.Input[str]: + """ + A unique ID that identifies this interconnect attachment. + + + - - - + """ + return pulumi.get(self, "interconnect_attachment_id") + + @interconnect_attachment_id.setter + def interconnect_attachment_id(self, value: pulumi.Input[str]): + pulumi.set(self, "interconnect_attachment_id", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def network(self) -> pulumi.Input[str]: + """ + The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: pulumi.Input[str]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter(name="vlanId") + def vlan_id(self) -> pulumi.Input[int]: + """ + VLAN ID provided by user. Must be site-wise unique. + """ + return pulumi.get(self, "vlan_id") + + @vlan_id.setter + def vlan_id(self, value: pulumi.Input[int]): + pulumi.set(self, "vlan_id", value) + + @property + @pulumi.getter + def zone(self) -> pulumi.Input[str]: + """ + The name of the target Distributed Cloud Edge zone. + """ + return pulumi.get(self, "zone") + + @zone.setter + def zone(self, value: pulumi.Input[str]): + pulumi.set(self, "zone", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def mtu(self) -> Optional[pulumi.Input[int]]: + """ + IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + """ + return pulumi.get(self, "mtu") + + @mtu.setter + def mtu(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "mtu", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _InterconnectAttachmentState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + description: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + interconnect: Optional[pulumi.Input[str]] = None, + interconnect_attachment_id: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mtu: Optional[pulumi.Input[int]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None, + vlan_id: Optional[pulumi.Input[int]] = None, + zone: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering InterconnectAttachment resources. + :param pulumi.Input[str] create_time: The time when the resource was created. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] interconnect: The ID of the underlying interconnect that this attachment's traffic will traverse through. + :param pulumi.Input[str] interconnect_attachment_id: A unique ID that identifies this interconnect attachment. + + + - - - + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + :param pulumi.Input[int] mtu: IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + :param pulumi.Input[str] name: The canonical name of this resource, with format + `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + :param pulumi.Input[str] network: The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time when the resource was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + :param pulumi.Input[int] vlan_id: VLAN ID provided by user. Must be site-wise unique. + :param pulumi.Input[str] zone: The name of the target Distributed Cloud Edge zone. + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if description is not None: + pulumi.set(__self__, "description", description) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if interconnect is not None: + pulumi.set(__self__, "interconnect", interconnect) + if interconnect_attachment_id is not None: + pulumi.set(__self__, "interconnect_attachment_id", interconnect_attachment_id) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if mtu is not None: + pulumi.set(__self__, "mtu", mtu) + if name is not None: + pulumi.set(__self__, "name", name) + if network is not None: + pulumi.set(__self__, "network", network) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + if vlan_id is not None: + pulumi.set(__self__, "vlan_id", vlan_id) + if zone is not None: + pulumi.set(__self__, "zone", zone) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + The time when the resource was created. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def interconnect(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the underlying interconnect that this attachment's traffic will traverse through. + """ + return pulumi.get(self, "interconnect") + + @interconnect.setter + def interconnect(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "interconnect", value) + + @property + @pulumi.getter(name="interconnectAttachmentId") + def interconnect_attachment_id(self) -> Optional[pulumi.Input[str]]: + """ + A unique ID that identifies this interconnect attachment. + + + - - - + """ + return pulumi.get(self, "interconnect_attachment_id") + + @interconnect_attachment_id.setter + def interconnect_attachment_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "interconnect_attachment_id", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def mtu(self) -> Optional[pulumi.Input[int]]: + """ + IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + """ + return pulumi.get(self, "mtu") + + @mtu.setter + def mtu(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "mtu", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The canonical name of this resource, with format + `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + The time when the resource was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + @property + @pulumi.getter(name="vlanId") + def vlan_id(self) -> Optional[pulumi.Input[int]]: + """ + VLAN ID provided by user. Must be site-wise unique. + """ + return pulumi.get(self, "vlan_id") + + @vlan_id.setter + def vlan_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "vlan_id", value) + + @property + @pulumi.getter + def zone(self) -> Optional[pulumi.Input[str]]: + """ + The name of the target Distributed Cloud Edge zone. + """ + return pulumi.get(self, "zone") + + @zone.setter + def zone(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "zone", value) + + +class InterconnectAttachment(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + interconnect: Optional[pulumi.Input[str]] = None, + interconnect_attachment_id: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mtu: Optional[pulumi.Input[int]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + vlan_id: Optional[pulumi.Input[int]] = None, + zone: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. + + To get more information about InterconnectAttachment, see: + + * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) + * How-to Guides + * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) + + ## Example Usage + + ### Edgenetwork Interconnect Attachment + + ```python + import pulumi + import pulumi_gcp as gcp + + example_network = gcp.edgenetwork.Network("example_network", + network_id="example-network", + location="us-west1", + zone="", + description="Example network.", + mtu=9000) + example_interconnect_attachment = gcp.edgenetwork.InterconnectAttachment("example_interconnect_attachment", + interconnect_attachment_id="example-interconnect-attachment", + location="us-west1", + zone="", + description="Example interconnect attachment.", + network=example_network.id, + interconnect="11111111-2222-3333-4444-555555555555", + vlan_id=55, + mtu=9000, + labels={ + "environment": "dev", + }) + ``` + + ## Import + + InterconnectAttachment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` + + * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` + + * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` + + * `{{location}}/{{interconnect_attachment_id}}` + + * `{{name}}` + + When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[str] interconnect: The ID of the underlying interconnect that this attachment's traffic will traverse through. + :param pulumi.Input[str] interconnect_attachment_id: A unique ID that identifies this interconnect attachment. + + + - - - + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + :param pulumi.Input[int] mtu: IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + :param pulumi.Input[str] network: The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[int] vlan_id: VLAN ID provided by user. Must be site-wise unique. + :param pulumi.Input[str] zone: The name of the target Distributed Cloud Edge zone. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: InterconnectAttachmentArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A Distributed Cloud Edge interconnect attachment, which connects routers to the northbound network. + + To get more information about InterconnectAttachment, see: + + * [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/network/rest/v1/projects.locations.zones.interconnectAttachments) + * How-to Guides + * [Create and manage interconnect attachments](https://cloud.google.com/distributed-cloud/edge/latest/docs/attachments#api) + + ## Example Usage + + ### Edgenetwork Interconnect Attachment + + ```python + import pulumi + import pulumi_gcp as gcp + + example_network = gcp.edgenetwork.Network("example_network", + network_id="example-network", + location="us-west1", + zone="", + description="Example network.", + mtu=9000) + example_interconnect_attachment = gcp.edgenetwork.InterconnectAttachment("example_interconnect_attachment", + interconnect_attachment_id="example-interconnect-attachment", + location="us-west1", + zone="", + description="Example interconnect attachment.", + network=example_network.id, + interconnect="11111111-2222-3333-4444-555555555555", + vlan_id=55, + mtu=9000, + labels={ + "environment": "dev", + }) + ``` + + ## Import + + InterconnectAttachment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}}` + + * `{{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}}` + + * `{{location}}/{{zone}}/{{interconnect_attachment_id}}` + + * `{{location}}/{{interconnect_attachment_id}}` + + * `{{name}}` + + When using the `pulumi import` command, InterconnectAttachment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachment/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{project}}/{{location}}/{{zone}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{zone}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{location}}/{{interconnect_attachment_id}} + ``` + + ```sh + $ pulumi import gcp:edgenetwork/interconnectAttachment:InterconnectAttachment default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param InterconnectAttachmentArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(InterconnectAttachmentArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + description: Optional[pulumi.Input[str]] = None, + interconnect: Optional[pulumi.Input[str]] = None, + interconnect_attachment_id: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mtu: Optional[pulumi.Input[int]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + vlan_id: Optional[pulumi.Input[int]] = None, + zone: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = InterconnectAttachmentArgs.__new__(InterconnectAttachmentArgs) + + __props__.__dict__["description"] = description + if interconnect is None and not opts.urn: + raise TypeError("Missing required property 'interconnect'") + __props__.__dict__["interconnect"] = interconnect + if interconnect_attachment_id is None and not opts.urn: + raise TypeError("Missing required property 'interconnect_attachment_id'") + __props__.__dict__["interconnect_attachment_id"] = interconnect_attachment_id + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["mtu"] = mtu + if network is None and not opts.urn: + raise TypeError("Missing required property 'network'") + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + if vlan_id is None and not opts.urn: + raise TypeError("Missing required property 'vlan_id'") + __props__.__dict__["vlan_id"] = vlan_id + if zone is None and not opts.urn: + raise TypeError("Missing required property 'zone'") + __props__.__dict__["zone"] = zone + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(InterconnectAttachment, __self__).__init__( + 'gcp:edgenetwork/interconnectAttachment:InterconnectAttachment', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + description: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + interconnect: Optional[pulumi.Input[str]] = None, + interconnect_attachment_id: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mtu: Optional[pulumi.Input[int]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None, + vlan_id: Optional[pulumi.Input[int]] = None, + zone: Optional[pulumi.Input[str]] = None) -> 'InterconnectAttachment': + """ + Get an existing InterconnectAttachment resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: The time when the resource was created. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + :param pulumi.Input[str] description: A free-text description of the resource. Max length 1024 characters. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] interconnect: The ID of the underlying interconnect that this attachment's traffic will traverse through. + :param pulumi.Input[str] interconnect_attachment_id: A unique ID that identifies this interconnect attachment. + + + - - - + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + :param pulumi.Input[int] mtu: IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + :param pulumi.Input[str] name: The canonical name of this resource, with format + `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + :param pulumi.Input[str] network: The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time when the resource was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + :param pulumi.Input[int] vlan_id: VLAN ID provided by user. Must be site-wise unique. + :param pulumi.Input[str] zone: The name of the target Distributed Cloud Edge zone. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _InterconnectAttachmentState.__new__(_InterconnectAttachmentState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["description"] = description + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["interconnect"] = interconnect + __props__.__dict__["interconnect_attachment_id"] = interconnect_attachment_id + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["mtu"] = mtu + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["update_time"] = update_time + __props__.__dict__["vlan_id"] = vlan_id + __props__.__dict__["zone"] = zone + return InterconnectAttachment(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + The time when the resource was created. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[str]]: + """ + A free-text description of the resource. Max length 1024 characters. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def interconnect(self) -> pulumi.Output[str]: + """ + The ID of the underlying interconnect that this attachment's traffic will traverse through. + """ + return pulumi.get(self, "interconnect") + + @property + @pulumi.getter(name="interconnectAttachmentId") + def interconnect_attachment_id(self) -> pulumi.Output[str]: + """ + A unique ID that identifies this interconnect attachment. + + + - - - + """ + return pulumi.get(self, "interconnect_attachment_id") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Labels associated with this resource. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The Google Cloud region to which the target Distributed Cloud Edge zone belongs. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def mtu(self) -> pulumi.Output[Optional[int]]: + """ + IP (L3) MTU value of the virtual edge cloud. Default value is `1500`. Possible values are: `1500`, `9000`. + """ + return pulumi.get(self, "mtu") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The canonical name of this resource, with format + `projects/{{project}}/locations/{{location}}/zones/{{zone}}/interconnectAttachments/{{interconnect_attachment_id}}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def network(self) -> pulumi.Output[str]: + """ + The ID of the network to which this interconnect attachment belongs. + Must be of the form: `projects/{{project}}/locations/{{location}}/zones/{{zone}}/networks/{{network_id}}` + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + The time when the resource was last updated. + A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine + fractional digits. Examples: `2014-10-02T15:01:23Z` and `2014-10-02T15:01:23.045123456Z`. + """ + return pulumi.get(self, "update_time") + + @property + @pulumi.getter(name="vlanId") + def vlan_id(self) -> pulumi.Output[int]: + """ + VLAN ID provided by user. Must be site-wise unique. + """ + return pulumi.get(self, "vlan_id") + + @property + @pulumi.getter + def zone(self) -> pulumi.Output[str]: + """ + The name of the target Distributed Cloud Edge zone. + """ + return pulumi.get(self, "zone") + diff --git a/sdk/python/pulumi_gcp/firestore/field.py b/sdk/python/pulumi_gcp/firestore/field.py index fbafedf010..09706a4c17 100644 --- a/sdk/python/pulumi_gcp/firestore/field.py +++ b/sdk/python/pulumi_gcp/firestore/field.py @@ -324,7 +324,7 @@ def __init__(__self__, basic = gcp.firestore.Field("basic", project="my-project-name", database=database.name, - collection="chatrooms__8493", + collection="chatrooms__9106", field="basic", index_config={ "indexes": [ @@ -375,7 +375,7 @@ def __init__(__self__, match_override = gcp.firestore.Field("match_override", project="my-project-name", database=database.name, - collection="chatrooms__9106", + collection="chatrooms__27169", field="field_with_same_configuration_as_ancestor", index_config={ "indexes": [ @@ -462,7 +462,7 @@ def __init__(__self__, basic = gcp.firestore.Field("basic", project="my-project-name", database=database.name, - collection="chatrooms__8493", + collection="chatrooms__9106", field="basic", index_config={ "indexes": [ @@ -513,7 +513,7 @@ def __init__(__self__, match_override = gcp.firestore.Field("match_override", project="my-project-name", database=database.name, - collection="chatrooms__9106", + collection="chatrooms__27169", field="field_with_same_configuration_as_ancestor", index_config={ "indexes": [ diff --git a/sdk/python/pulumi_gcp/gemini/code_repository_index.py b/sdk/python/pulumi_gcp/gemini/code_repository_index.py index 3b05079037..fa70343810 100644 --- a/sdk/python/pulumi_gcp/gemini/code_repository_index.py +++ b/sdk/python/pulumi_gcp/gemini/code_repository_index.py @@ -21,6 +21,7 @@ class CodeRepositoryIndexArgs: def __init__(__self__, *, code_repository_index_id: pulumi.Input[str], location: pulumi.Input[str], + force_destroy: Optional[pulumi.Input[bool]] = None, kms_key: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None): @@ -31,6 +32,7 @@ def __init__(__self__, *, - - - :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[bool] force_destroy: If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format projects/*/locations/*/keyRings/*/cryptoKeys/*. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Optional. Labels as key value pairs. @@ -41,6 +43,8 @@ def __init__(__self__, *, """ pulumi.set(__self__, "code_repository_index_id", code_repository_index_id) pulumi.set(__self__, "location", location) + if force_destroy is not None: + pulumi.set(__self__, "force_destroy", force_destroy) if kms_key is not None: pulumi.set(__self__, "kms_key", kms_key) if labels is not None: @@ -75,6 +79,18 @@ def location(self) -> pulumi.Input[str]: def location(self, value: pulumi.Input[str]): pulumi.set(self, "location", value) + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> Optional[pulumi.Input[bool]]: + """ + If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + """ + return pulumi.get(self, "force_destroy") + + @force_destroy.setter + def force_destroy(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "force_destroy", value) + @property @pulumi.getter(name="kmsKey") def kms_key(self) -> Optional[pulumi.Input[str]]: @@ -122,6 +138,7 @@ def __init__(__self__, *, code_repository_index_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, kms_key: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -138,6 +155,7 @@ def __init__(__self__, *, - - - :param pulumi.Input[str] create_time: Output only. Create time stamp. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[bool] force_destroy: If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format projects/*/locations/*/keyRings/*/cryptoKeys/*. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Optional. Labels as key value pairs. @@ -164,6 +182,8 @@ def __init__(__self__, *, pulumi.set(__self__, "create_time", create_time) if effective_labels is not None: pulumi.set(__self__, "effective_labels", effective_labels) + if force_destroy is not None: + pulumi.set(__self__, "force_destroy", force_destroy) if kms_key is not None: pulumi.set(__self__, "kms_key", kms_key) if labels is not None: @@ -220,6 +240,18 @@ def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[st def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "effective_labels", value) + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> Optional[pulumi.Input[bool]]: + """ + If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + """ + return pulumi.get(self, "force_destroy") + + @force_destroy.setter + def force_destroy(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "force_destroy", value) + @property @pulumi.getter(name="kmsKey") def kms_key(self) -> Optional[pulumi.Input[str]]: @@ -334,6 +366,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, code_repository_index_id: Optional[pulumi.Input[str]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, kms_key: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -384,6 +417,7 @@ def __init__(__self__, - - - + :param pulumi.Input[bool] force_destroy: If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format projects/*/locations/*/keyRings/*/cryptoKeys/*. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Optional. Labels as key value pairs. @@ -454,6 +488,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, code_repository_index_id: Optional[pulumi.Input[str]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, kms_key: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -470,6 +505,7 @@ def _internal_init(__self__, if code_repository_index_id is None and not opts.urn: raise TypeError("Missing required property 'code_repository_index_id'") __props__.__dict__["code_repository_index_id"] = code_repository_index_id + __props__.__dict__["force_destroy"] = force_destroy __props__.__dict__["kms_key"] = kms_key __props__.__dict__["labels"] = labels if location is None and not opts.urn: @@ -497,6 +533,7 @@ def get(resource_name: str, code_repository_index_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + force_destroy: Optional[pulumi.Input[bool]] = None, kms_key: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -518,6 +555,7 @@ def get(resource_name: str, - - - :param pulumi.Input[str] create_time: Output only. Create time stamp. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[bool] force_destroy: If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format projects/*/locations/*/keyRings/*/cryptoKeys/*. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Optional. Labels as key value pairs. @@ -545,6 +583,7 @@ def get(resource_name: str, __props__.__dict__["code_repository_index_id"] = code_repository_index_id __props__.__dict__["create_time"] = create_time __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["force_destroy"] = force_destroy __props__.__dict__["kms_key"] = kms_key __props__.__dict__["labels"] = labels __props__.__dict__["location"] = location @@ -582,6 +621,14 @@ def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: """ return pulumi.get(self, "effective_labels") + @property + @pulumi.getter(name="forceDestroy") + def force_destroy(self) -> pulumi.Output[Optional[bool]]: + """ + If set to true, will allow deletion of the CodeRepositoryIndex even if there are existing RepositoryGroups for the resource. These RepositoryGroups will also be deleted. + """ + return pulumi.get(self, "force_destroy") + @property @pulumi.getter(name="kmsKey") def kms_key(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/gkehub/membership_binding.py b/sdk/python/pulumi_gcp/gkehub/membership_binding.py index 7136216709..9c181dcd57 100644 --- a/sdk/python/pulumi_gcp/gkehub/membership_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/membership_binding.py @@ -423,16 +423,16 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_27169", + membership_id="tf-test-membership_75223", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), }, }, opts = pulumi.ResourceOptions(depends_on=[primary])) - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_75223") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_41819") membership_binding = gcp.gkehub.MembershipBinding("membership_binding", - membership_binding_id="tf-test-membership-binding_41819", + membership_binding_id="tf-test-membership-binding_75092", scope=scope.name, membership_id=membership.membership_id, location="global", @@ -519,16 +519,16 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_27169", + membership_id="tf-test-membership_75223", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), }, }, opts = pulumi.ResourceOptions(depends_on=[primary])) - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_75223") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_41819") membership_binding = gcp.gkehub.MembershipBinding("membership_binding", - membership_binding_id="tf-test-membership-binding_41819", + membership_binding_id="tf-test-membership-binding_75092", scope=scope.name, membership_id=membership.membership_id, location="global", diff --git a/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py b/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py index 8628466df3..78f7e92a2a 100644 --- a/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py @@ -356,7 +356,7 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_75092", + membership_id="tf-test-membership_2605", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), @@ -365,7 +365,7 @@ def __init__(__self__, opts = pulumi.ResourceOptions(depends_on=[primary])) project = gcp.organizations.get_project() membership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", - membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_2605", + membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_34535", membership_id=membership.membership_id, user=f"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com", role={ @@ -434,7 +434,7 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_75092", + membership_id="tf-test-membership_2605", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), @@ -443,7 +443,7 @@ def __init__(__self__, opts = pulumi.ResourceOptions(depends_on=[primary])) project = gcp.organizations.get_project() membership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", - membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_2605", + membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_34535", membership_id=membership.membership_id, user=f"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com", role={ diff --git a/sdk/python/pulumi_gcp/gkehub/namespace.py b/sdk/python/pulumi_gcp/gkehub/namespace.py index ced0db52e9..df5cbf9353 100644 --- a/sdk/python/pulumi_gcp/gkehub/namespace.py +++ b/sdk/python/pulumi_gcp/gkehub/namespace.py @@ -428,9 +428,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_34535") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_22375") namespace = gcp.gkehub.Namespace("namespace", - scope_namespace_id="tf-test-namespace_22375", + scope_namespace_id="tf-test-namespace_29439", scope_id=scope.scope_id, scope=scope.name, namespace_labels={ @@ -513,9 +513,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_34535") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_22375") namespace = gcp.gkehub.Namespace("namespace", - scope_namespace_id="tf-test-namespace_22375", + scope_namespace_id="tf-test-namespace_29439", scope_id=scope.scope_id, scope=scope.name, namespace_labels={ diff --git a/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py b/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py index 8c2cc87649..ce490dad55 100644 --- a/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py @@ -429,9 +429,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_29439") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_87786") scope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", - scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_87786", + scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_2067", scope_id=scope.scope_id, user="test-email@gmail.com", role={ @@ -504,9 +504,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_29439") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_87786") scope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", - scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_87786", + scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_2067", scope_id=scope.scope_id, user="test-email@gmail.com", role={ diff --git a/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py b/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py index 50fb6830e6..24a3009a9e 100644 --- a/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py +++ b/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py @@ -253,7 +253,7 @@ def __init__(__self__, dest_group = gcp.iap.TunnelDestGroup("dest_group", region="us-central1", - group_name="testgroup_2067", + group_name="testgroup_40785", cidrs=[ "10.1.0.0/16", "192.168.10.0/24", @@ -339,7 +339,7 @@ def __init__(__self__, dest_group = gcp.iap.TunnelDestGroup("dest_group", region="us-central1", - group_name="testgroup_2067", + group_name="testgroup_40785", cidrs=[ "10.1.0.0/16", "192.168.10.0/24", diff --git a/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py b/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py index 5498d02695..acafb4727e 100644 --- a/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py +++ b/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py @@ -378,8 +378,8 @@ def __init__(__self__, import pulumi_gcp as gcp target_project = gcp.organizations.Project("target_project", - project_id="tf-test_40785", - name="tf-test_79169", + project_id="tf-test_79169", + name="tf-test_56529", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -400,8 +400,8 @@ def __init__(__self__, auto_create_subnetworks=False, opts = pulumi.ResourceOptions(depends_on=[compute])) zone = gcp.dns.ManagedZone("zone", - name="tf-test-dns_56529", - dns_name="private_75413.example.com.", + name="tf-test-dns_75413", + dns_name="private_55138.example.com.", visibility="private", private_visibility_config={ "networks": [{ @@ -489,8 +489,8 @@ def __init__(__self__, import pulumi_gcp as gcp target_project = gcp.organizations.Project("target_project", - project_id="tf-test_40785", - name="tf-test_79169", + project_id="tf-test_79169", + name="tf-test_56529", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -511,8 +511,8 @@ def __init__(__self__, auto_create_subnetworks=False, opts = pulumi.ResourceOptions(depends_on=[compute])) zone = gcp.dns.ManagedZone("zone", - name="tf-test-dns_56529", - dns_name="private_75413.example.com.", + name="tf-test-dns_75413", + dns_name="private_55138.example.com.", visibility="private", private_visibility_config={ "networks": [{ diff --git a/sdk/python/pulumi_gcp/networkconnectivity/spoke.py b/sdk/python/pulumi_gcp/networkconnectivity/spoke.py index 9be0b4be0b..46f7b63840 100644 --- a/sdk/python/pulumi_gcp/networkconnectivity/spoke.py +++ b/sdk/python/pulumi_gcp/networkconnectivity/spoke.py @@ -669,15 +669,15 @@ def __init__(__self__, import pulumi_gcp as gcp network = gcp.compute.Network("network", - name="tf-test-network_55138", + name="tf-test-network_37559", auto_create_subnetworks=False) subnetwork = gcp.compute.Subnetwork("subnetwork", - name="tf-test-subnet_37559", + name="tf-test-subnet_91980", ip_cidr_range="10.0.0.0/28", region="us-central1", network=network.self_link) instance = gcp.compute.Instance("instance", - name="tf-test-instance_91980", + name="tf-test-instance_37118", machine_type="e2-medium", can_ip_forward=True, zone="us-central1-a", @@ -694,13 +694,13 @@ def __init__(__self__, }], }]) basic_hub = gcp.networkconnectivity.Hub("basic_hub", - name="tf-test-hub_37118", + name="tf-test-hub_80332", description="A sample hub", labels={ "label-two": "value-one", }) primary = gcp.networkconnectivity.Spoke("primary", - name="tf-test-name_80332", + name="tf-test-name_13293", location="us-central1", description="A sample spoke with a linked routher appliance instance", labels={ @@ -932,8 +932,8 @@ def __init__(__self__, hub=star_hub.id, auto_accept={ "auto_accept_projects": [ - "foo_13293", - "bar_40289", + "foo_40289", + "bar_33395", ], }) primary = gcp.networkconnectivity.Spoke("primary", @@ -1099,15 +1099,15 @@ def __init__(__self__, import pulumi_gcp as gcp network = gcp.compute.Network("network", - name="tf-test-network_55138", + name="tf-test-network_37559", auto_create_subnetworks=False) subnetwork = gcp.compute.Subnetwork("subnetwork", - name="tf-test-subnet_37559", + name="tf-test-subnet_91980", ip_cidr_range="10.0.0.0/28", region="us-central1", network=network.self_link) instance = gcp.compute.Instance("instance", - name="tf-test-instance_91980", + name="tf-test-instance_37118", machine_type="e2-medium", can_ip_forward=True, zone="us-central1-a", @@ -1124,13 +1124,13 @@ def __init__(__self__, }], }]) basic_hub = gcp.networkconnectivity.Hub("basic_hub", - name="tf-test-hub_37118", + name="tf-test-hub_80332", description="A sample hub", labels={ "label-two": "value-one", }) primary = gcp.networkconnectivity.Spoke("primary", - name="tf-test-name_80332", + name="tf-test-name_13293", location="us-central1", description="A sample spoke with a linked routher appliance instance", labels={ @@ -1362,8 +1362,8 @@ def __init__(__self__, hub=star_hub.id, auto_accept={ "auto_accept_projects": [ - "foo_13293", - "bar_40289", + "foo_40289", + "bar_33395", ], }) primary = gcp.networkconnectivity.Spoke("primary", diff --git a/sdk/python/pulumi_gcp/networksecurity/authz_policy.py b/sdk/python/pulumi_gcp/networksecurity/authz_policy.py index 59affd4e55..9ca46b597c 100644 --- a/sdk/python/pulumi_gcp/networksecurity/authz_policy.py +++ b/sdk/python/pulumi_gcp/networksecurity/authz_policy.py @@ -457,107 +457,6 @@ def __init__(__self__, ## Example Usage - ### Network Services Authz Policy Advanced - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.compute.Network("default", - name="lb-network", - project="my-project-name", - auto_create_subnetworks=False) - default_subnetwork = gcp.compute.Subnetwork("default", - name="backend-subnet", - project="my-project-name", - region="us-west1", - ip_cidr_range="10.1.2.0/24", - network=default.id) - proxy_only = gcp.compute.Subnetwork("proxy_only", - name="proxy-only-subnet", - project="my-project-name", - region="us-west1", - ip_cidr_range="10.129.0.0/23", - purpose="REGIONAL_MANAGED_PROXY", - role="ACTIVE", - network=default.id) - default_address = gcp.compute.Address("default", - name="l7-ilb-ip-address", - project="my-project-name", - region="us-west1", - subnetwork=default_subnetwork.id, - address_type="INTERNAL", - purpose="GCE_ENDPOINT") - default_region_health_check = gcp.compute.RegionHealthCheck("default", - name="l7-ilb-basic-check", - project="my-project-name", - region="us-west1", - http_health_check={ - "port_specification": "USE_SERVING_PORT", - }) - url_map = gcp.compute.RegionBackendService("url_map", - name="l7-ilb-backend-service", - project="my-project-name", - region="us-west1", - load_balancing_scheme="INTERNAL_MANAGED", - health_checks=default_region_health_check.id) - default_region_url_map = gcp.compute.RegionUrlMap("default", - name="l7-ilb-map", - project="my-project-name", - region="us-west1", - default_service=url_map.id) - default_region_target_http_proxy = gcp.compute.RegionTargetHttpProxy("default", - name="l7-ilb-proxy", - project="my-project-name", - region="us-west1", - url_map=default_region_url_map.id) - default_forwarding_rule = gcp.compute.ForwardingRule("default", - name="l7-ilb-forwarding-rule", - project="my-project-name", - region="us-west1", - load_balancing_scheme="INTERNAL_MANAGED", - network=default.id, - subnetwork=default_subnetwork.id, - ip_protocol="TCP", - port_range="80", - target=default_region_target_http_proxy.id, - ip_address=default_address.id, - opts = pulumi.ResourceOptions(depends_on=[proxy_only])) - authz_extension = gcp.compute.RegionBackendService("authz_extension", - name="authz-service", - project="my-project-name", - region="us-west1", - protocol="HTTP2", - load_balancing_scheme="INTERNAL_MANAGED", - port_name="grpc") - default_authz_extension = gcp.networkservices.AuthzExtension("default", - name="my-authz-ext", - project="my-project-name", - location="us-west1", - description="my description", - load_balancing_scheme="INTERNAL_MANAGED", - authority="ext11.com", - service=authz_extension.self_link, - timeout="0.1s", - fail_open=False, - forward_headers=["Authorization"]) - default_authz_policy = gcp.networksecurity.AuthzPolicy("default", - name="my-authz-policy", - project="my-project-name", - location="us-west1", - description="my description", - target={ - "load_balancing_scheme": "INTERNAL_MANAGED", - "resources": [default_forwarding_rule.self_link], - }, - action="CUSTOM", - custom_provider={ - "authz_extension": { - "resources": [default_authz_extension.id], - }, - }) - ``` - ## Import AuthzPolicy can be imported using any of these accepted formats: @@ -628,107 +527,6 @@ def __init__(__self__, ## Example Usage - ### Network Services Authz Policy Advanced - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.compute.Network("default", - name="lb-network", - project="my-project-name", - auto_create_subnetworks=False) - default_subnetwork = gcp.compute.Subnetwork("default", - name="backend-subnet", - project="my-project-name", - region="us-west1", - ip_cidr_range="10.1.2.0/24", - network=default.id) - proxy_only = gcp.compute.Subnetwork("proxy_only", - name="proxy-only-subnet", - project="my-project-name", - region="us-west1", - ip_cidr_range="10.129.0.0/23", - purpose="REGIONAL_MANAGED_PROXY", - role="ACTIVE", - network=default.id) - default_address = gcp.compute.Address("default", - name="l7-ilb-ip-address", - project="my-project-name", - region="us-west1", - subnetwork=default_subnetwork.id, - address_type="INTERNAL", - purpose="GCE_ENDPOINT") - default_region_health_check = gcp.compute.RegionHealthCheck("default", - name="l7-ilb-basic-check", - project="my-project-name", - region="us-west1", - http_health_check={ - "port_specification": "USE_SERVING_PORT", - }) - url_map = gcp.compute.RegionBackendService("url_map", - name="l7-ilb-backend-service", - project="my-project-name", - region="us-west1", - load_balancing_scheme="INTERNAL_MANAGED", - health_checks=default_region_health_check.id) - default_region_url_map = gcp.compute.RegionUrlMap("default", - name="l7-ilb-map", - project="my-project-name", - region="us-west1", - default_service=url_map.id) - default_region_target_http_proxy = gcp.compute.RegionTargetHttpProxy("default", - name="l7-ilb-proxy", - project="my-project-name", - region="us-west1", - url_map=default_region_url_map.id) - default_forwarding_rule = gcp.compute.ForwardingRule("default", - name="l7-ilb-forwarding-rule", - project="my-project-name", - region="us-west1", - load_balancing_scheme="INTERNAL_MANAGED", - network=default.id, - subnetwork=default_subnetwork.id, - ip_protocol="TCP", - port_range="80", - target=default_region_target_http_proxy.id, - ip_address=default_address.id, - opts = pulumi.ResourceOptions(depends_on=[proxy_only])) - authz_extension = gcp.compute.RegionBackendService("authz_extension", - name="authz-service", - project="my-project-name", - region="us-west1", - protocol="HTTP2", - load_balancing_scheme="INTERNAL_MANAGED", - port_name="grpc") - default_authz_extension = gcp.networkservices.AuthzExtension("default", - name="my-authz-ext", - project="my-project-name", - location="us-west1", - description="my description", - load_balancing_scheme="INTERNAL_MANAGED", - authority="ext11.com", - service=authz_extension.self_link, - timeout="0.1s", - fail_open=False, - forward_headers=["Authorization"]) - default_authz_policy = gcp.networksecurity.AuthzPolicy("default", - name="my-authz-policy", - project="my-project-name", - location="us-west1", - description="my description", - target={ - "load_balancing_scheme": "INTERNAL_MANAGED", - "resources": [default_forwarding_rule.self_link], - }, - action="CUSTOM", - custom_provider={ - "authz_extension": { - "resources": [default_authz_extension.id], - }, - }) - ``` - ## Import AuthzPolicy can be imported using any of these accepted formats: diff --git a/sdk/python/pulumi_gcp/orgpolicy/policy.py b/sdk/python/pulumi_gcp/orgpolicy/policy.py index 11bff767e2..f5721f0e43 100644 --- a/sdk/python/pulumi_gcp/orgpolicy/policy.py +++ b/sdk/python/pulumi_gcp/orgpolicy/policy.py @@ -313,7 +313,7 @@ def __init__(__self__, import pulumi_gcp as gcp constraint = gcp.orgpolicy.CustomConstraint("constraint", - name="custom.disableGkeAutoUpgrade_76044", + name="custom.disableGkeAutoUpgrade_69391", parent="organizations/123456789", display_name="Disable GKE auto upgrade", description="Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", @@ -502,7 +502,7 @@ def __init__(__self__, import pulumi_gcp as gcp constraint = gcp.orgpolicy.CustomConstraint("constraint", - name="custom.disableGkeAutoUpgrade_76044", + name="custom.disableGkeAutoUpgrade_69391", parent="organizations/123456789", display_name="Disable GKE auto upgrade", description="Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/python/pulumi_gcp/parametermanager/__init__.py b/sdk/python/pulumi_gcp/parametermanager/__init__.py new file mode 100644 index 0000000000..7eee037f61 --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/__init__.py @@ -0,0 +1,13 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +from .. import _utilities +import typing +# Export this package's modules as members: +from .get_regional_parameter import * +from .parameter import * +from .regional_parameter import * +from .regional_parameter_version import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/parametermanager/_inputs.py b/sdk/python/pulumi_gcp/parametermanager/_inputs.py new file mode 100644 index 0000000000..461e2b54ea --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/_inputs.py @@ -0,0 +1,174 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'ParameterPolicyMemberArgs', + 'ParameterPolicyMemberArgsDict', + 'RegionalParameterPolicyMemberArgs', + 'RegionalParameterPolicyMemberArgsDict', +] + +MYPY = False + +if not MYPY: + class ParameterPolicyMemberArgsDict(TypedDict): + iam_policy_name_principal: NotRequired[pulumi.Input[str]] + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + resource is deleted and recreated with the same name, the binding will be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + """ + iam_policy_uid_principal: NotRequired[pulumi.Input[str]] + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + If a resource is deleted and recreated with the same name, the binding will not be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + """ +elif False: + ParameterPolicyMemberArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ParameterPolicyMemberArgs: + def __init__(__self__, *, + iam_policy_name_principal: Optional[pulumi.Input[str]] = None, + iam_policy_uid_principal: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] iam_policy_name_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + resource is deleted and recreated with the same name, the binding will be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + :param pulumi.Input[str] iam_policy_uid_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + If a resource is deleted and recreated with the same name, the binding will not be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + """ + if iam_policy_name_principal is not None: + pulumi.set(__self__, "iam_policy_name_principal", iam_policy_name_principal) + if iam_policy_uid_principal is not None: + pulumi.set(__self__, "iam_policy_uid_principal", iam_policy_uid_principal) + + @property + @pulumi.getter(name="iamPolicyNamePrincipal") + def iam_policy_name_principal(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + resource is deleted and recreated with the same name, the binding will be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "iam_policy_name_principal") + + @iam_policy_name_principal.setter + def iam_policy_name_principal(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "iam_policy_name_principal", value) + + @property + @pulumi.getter(name="iamPolicyUidPrincipal") + def iam_policy_uid_principal(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + If a resource is deleted and recreated with the same name, the binding will not be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + """ + return pulumi.get(self, "iam_policy_uid_principal") + + @iam_policy_uid_principal.setter + def iam_policy_uid_principal(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "iam_policy_uid_principal", value) + + +if not MYPY: + class RegionalParameterPolicyMemberArgsDict(TypedDict): + iam_policy_name_principal: NotRequired[pulumi.Input[str]] + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + """ + iam_policy_uid_principal: NotRequired[pulumi.Input[str]] + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + """ +elif False: + RegionalParameterPolicyMemberArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RegionalParameterPolicyMemberArgs: + def __init__(__self__, *, + iam_policy_name_principal: Optional[pulumi.Input[str]] = None, + iam_policy_uid_principal: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] iam_policy_name_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + :param pulumi.Input[str] iam_policy_uid_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + """ + if iam_policy_name_principal is not None: + pulumi.set(__self__, "iam_policy_name_principal", iam_policy_name_principal) + if iam_policy_uid_principal is not None: + pulumi.set(__self__, "iam_policy_uid_principal", iam_policy_uid_principal) + + @property + @pulumi.getter(name="iamPolicyNamePrincipal") + def iam_policy_name_principal(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "iam_policy_name_principal") + + @iam_policy_name_principal.setter + def iam_policy_name_principal(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "iam_policy_name_principal", value) + + @property + @pulumi.getter(name="iamPolicyUidPrincipal") + def iam_policy_uid_principal(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + """ + return pulumi.get(self, "iam_policy_uid_principal") + + @iam_policy_uid_principal.setter + def iam_policy_uid_principal(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "iam_policy_uid_principal", value) + + diff --git a/sdk/python/pulumi_gcp/parametermanager/get_regional_parameter.py b/sdk/python/pulumi_gcp/parametermanager/get_regional_parameter.py new file mode 100644 index 0000000000..5c9cdd2fa3 --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/get_regional_parameter.py @@ -0,0 +1,230 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs + +__all__ = [ + 'GetRegionalParameterResult', + 'AwaitableGetRegionalParameterResult', + 'get_regional_parameter', + 'get_regional_parameter_output', +] + +@pulumi.output_type +class GetRegionalParameterResult: + """ + A collection of values returned by getRegionalParameter. + """ + def __init__(__self__, create_time=None, effective_labels=None, format=None, id=None, labels=None, location=None, name=None, parameter_id=None, policy_members=None, project=None, pulumi_labels=None, update_time=None): + if create_time and not isinstance(create_time, str): + raise TypeError("Expected argument 'create_time' to be a str") + pulumi.set(__self__, "create_time", create_time) + if effective_labels and not isinstance(effective_labels, dict): + raise TypeError("Expected argument 'effective_labels' to be a dict") + pulumi.set(__self__, "effective_labels", effective_labels) + if format and not isinstance(format, str): + raise TypeError("Expected argument 'format' to be a str") + pulumi.set(__self__, "format", format) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if labels and not isinstance(labels, dict): + raise TypeError("Expected argument 'labels' to be a dict") + pulumi.set(__self__, "labels", labels) + if location and not isinstance(location, str): + raise TypeError("Expected argument 'location' to be a str") + pulumi.set(__self__, "location", location) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if parameter_id and not isinstance(parameter_id, str): + raise TypeError("Expected argument 'parameter_id' to be a str") + pulumi.set(__self__, "parameter_id", parameter_id) + if policy_members and not isinstance(policy_members, list): + raise TypeError("Expected argument 'policy_members' to be a list") + pulumi.set(__self__, "policy_members", policy_members) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + if pulumi_labels and not isinstance(pulumi_labels, dict): + raise TypeError("Expected argument 'pulumi_labels' to be a dict") + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if update_time and not isinstance(update_time, str): + raise TypeError("Expected argument 'update_time' to be a str") + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> str: + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Mapping[str, str]: + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def format(self) -> str: + return pulumi.get(self, "format") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def labels(self) -> Mapping[str, str]: + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> str: + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> str: + return pulumi.get(self, "parameter_id") + + @property + @pulumi.getter(name="policyMembers") + def policy_members(self) -> Sequence['outputs.GetRegionalParameterPolicyMemberResult']: + return pulumi.get(self, "policy_members") + + @property + @pulumi.getter + def project(self) -> Optional[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Mapping[str, str]: + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> str: + return pulumi.get(self, "update_time") + + +class AwaitableGetRegionalParameterResult(GetRegionalParameterResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetRegionalParameterResult( + create_time=self.create_time, + effective_labels=self.effective_labels, + format=self.format, + id=self.id, + labels=self.labels, + location=self.location, + name=self.name, + parameter_id=self.parameter_id, + policy_members=self.policy_members, + project=self.project, + pulumi_labels=self.pulumi_labels, + update_time=self.update_time) + + +def get_regional_parameter(location: Optional[str] = None, + parameter_id: Optional[str] = None, + project: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetRegionalParameterResult: + """ + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + reg_parameter_datasource = gcp.parametermanager.get_regional_parameter(parameter_id="foobar", + location="us-central1") + ``` + + + :param str location: The location of the regional parameter. eg us-central1 + :param str parameter_id: The name of the regional parameter. + :param str project: The ID of the project in which the resource belongs. + """ + __args__ = dict() + __args__['location'] = location + __args__['parameterId'] = parameter_id + __args__['project'] = project + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:parametermanager/getRegionalParameter:getRegionalParameter', __args__, opts=opts, typ=GetRegionalParameterResult).value + + return AwaitableGetRegionalParameterResult( + create_time=pulumi.get(__ret__, 'create_time'), + effective_labels=pulumi.get(__ret__, 'effective_labels'), + format=pulumi.get(__ret__, 'format'), + id=pulumi.get(__ret__, 'id'), + labels=pulumi.get(__ret__, 'labels'), + location=pulumi.get(__ret__, 'location'), + name=pulumi.get(__ret__, 'name'), + parameter_id=pulumi.get(__ret__, 'parameter_id'), + policy_members=pulumi.get(__ret__, 'policy_members'), + project=pulumi.get(__ret__, 'project'), + pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'), + update_time=pulumi.get(__ret__, 'update_time')) +def get_regional_parameter_output(location: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetRegionalParameterResult]: + """ + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + reg_parameter_datasource = gcp.parametermanager.get_regional_parameter(parameter_id="foobar", + location="us-central1") + ``` + + + :param str location: The location of the regional parameter. eg us-central1 + :param str parameter_id: The name of the regional parameter. + :param str project: The ID of the project in which the resource belongs. + """ + __args__ = dict() + __args__['location'] = location + __args__['parameterId'] = parameter_id + __args__['project'] = project + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('gcp:parametermanager/getRegionalParameter:getRegionalParameter', __args__, opts=opts, typ=GetRegionalParameterResult) + return __ret__.apply(lambda __response__: GetRegionalParameterResult( + create_time=pulumi.get(__response__, 'create_time'), + effective_labels=pulumi.get(__response__, 'effective_labels'), + format=pulumi.get(__response__, 'format'), + id=pulumi.get(__response__, 'id'), + labels=pulumi.get(__response__, 'labels'), + location=pulumi.get(__response__, 'location'), + name=pulumi.get(__response__, 'name'), + parameter_id=pulumi.get(__response__, 'parameter_id'), + policy_members=pulumi.get(__response__, 'policy_members'), + project=pulumi.get(__response__, 'project'), + pulumi_labels=pulumi.get(__response__, 'pulumi_labels'), + update_time=pulumi.get(__response__, 'update_time'))) diff --git a/sdk/python/pulumi_gcp/parametermanager/outputs.py b/sdk/python/pulumi_gcp/parametermanager/outputs.py new file mode 100644 index 0000000000..b569fb9cc0 --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/outputs.py @@ -0,0 +1,191 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'ParameterPolicyMember', + 'RegionalParameterPolicyMember', + 'GetRegionalParameterPolicyMemberResult', +] + +@pulumi.output_type +class ParameterPolicyMember(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "iamPolicyNamePrincipal": + suggest = "iam_policy_name_principal" + elif key == "iamPolicyUidPrincipal": + suggest = "iam_policy_uid_principal" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ParameterPolicyMember. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ParameterPolicyMember.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ParameterPolicyMember.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + iam_policy_name_principal: Optional[str] = None, + iam_policy_uid_principal: Optional[str] = None): + """ + :param str iam_policy_name_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + resource is deleted and recreated with the same name, the binding will be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + :param str iam_policy_uid_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + If a resource is deleted and recreated with the same name, the binding will not be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + """ + if iam_policy_name_principal is not None: + pulumi.set(__self__, "iam_policy_name_principal", iam_policy_name_principal) + if iam_policy_uid_principal is not None: + pulumi.set(__self__, "iam_policy_uid_principal", iam_policy_uid_principal) + + @property + @pulumi.getter(name="iamPolicyNamePrincipal") + def iam_policy_name_principal(self) -> Optional[str]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a + resource is deleted and recreated with the same name, the binding will be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/global/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "iam_policy_name_principal") + + @property + @pulumi.getter(name="iamPolicyUidPrincipal") + def iam_policy_uid_principal(self) -> Optional[str]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. + If a resource is deleted and recreated with the same name, the binding will not be applicable to the + new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/global/parameters/{{uid}}` + """ + return pulumi.get(self, "iam_policy_uid_principal") + + +@pulumi.output_type +class RegionalParameterPolicyMember(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "iamPolicyNamePrincipal": + suggest = "iam_policy_name_principal" + elif key == "iamPolicyUidPrincipal": + suggest = "iam_policy_uid_principal" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RegionalParameterPolicyMember. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RegionalParameterPolicyMember.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RegionalParameterPolicyMember.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + iam_policy_name_principal: Optional[str] = None, + iam_policy_uid_principal: Optional[str] = None): + """ + :param str iam_policy_name_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + :param str iam_policy_uid_principal: (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + """ + if iam_policy_name_principal is not None: + pulumi.set(__self__, "iam_policy_name_principal", iam_policy_name_principal) + if iam_policy_uid_principal is not None: + pulumi.set(__self__, "iam_policy_uid_principal", iam_policy_uid_principal) + + @property + @pulumi.getter(name="iamPolicyNamePrincipal") + def iam_policy_name_principal(self) -> Optional[str]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "iam_policy_name_principal") + + @property + @pulumi.getter(name="iamPolicyUidPrincipal") + def iam_policy_uid_principal(self) -> Optional[str]: + """ + (Output) + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + `principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}` + """ + return pulumi.get(self, "iam_policy_uid_principal") + + +@pulumi.output_type +class GetRegionalParameterPolicyMemberResult(dict): + def __init__(__self__, *, + iam_policy_name_principal: str, + iam_policy_uid_principal: str): + """ + :param str iam_policy_name_principal: IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + :param str iam_policy_uid_principal: IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + """ + pulumi.set(__self__, "iam_policy_name_principal", iam_policy_name_principal) + pulumi.set(__self__, "iam_policy_uid_principal", iam_policy_uid_principal) + + @property + @pulumi.getter(name="iamPolicyNamePrincipal") + def iam_policy_name_principal(self) -> str: + """ + IAM policy binding member referring to a Google Cloud resource by user-assigned name. If a resource is + deleted and recreated with the same name, the binding will be applicable to the new resource. Format: + 'principal://parametermanager.googleapis.com/projects/{{project}}/name/locations/{{location}}/parameters/{{parameter_id}}' + """ + return pulumi.get(self, "iam_policy_name_principal") + + @property + @pulumi.getter(name="iamPolicyUidPrincipal") + def iam_policy_uid_principal(self) -> str: + """ + IAM policy binding member referring to a Google Cloud resource by system-assigned unique identifier. If + a resource is deleted and recreated with the same name, the binding will not be applicable to the new + resource. Format: + 'principal://parametermanager.googleapis.com/projects/{{project}}/uid/locations/{{location}}/parameters/{{uid}}' + """ + return pulumi.get(self, "iam_policy_uid_principal") + + diff --git a/sdk/python/pulumi_gcp/parametermanager/parameter.py b/sdk/python/pulumi_gcp/parametermanager/parameter.py new file mode 100644 index 0000000000..99a1c08542 --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/parameter.py @@ -0,0 +1,706 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ParameterArgs', 'Parameter'] + +@pulumi.input_type +class ParameterArgs: + def __init__(__self__, *, + parameter_id: pulumi.Input[str], + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Parameter resource. + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[str] format: The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "parameter_id", parameter_id) + if format is not None: + pulumi.set(__self__, "format", format) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> pulumi.Input[str]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @parameter_id.setter + def parameter_id(self, value: pulumi.Input[str]): + pulumi.set(self, "parameter_id", value) + + @property + @pulumi.getter + def format(self) -> Optional[pulumi.Input[str]]: + """ + The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @format.setter + def format(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "format", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _ParameterState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + policy_members: Optional[pulumi.Input[Sequence[pulumi.Input['ParameterPolicyMemberArgs']]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Parameter resources. + :param pulumi.Input[str] create_time: The time at which the Parameter was created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] format: The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] name: The resource name of the Parameter. Format: + `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input['ParameterPolicyMemberArgs']]] policy_members: Policy member strings of a Google Cloud resource. + Structure is documented below. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time at which the Parameter was updated. + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if format is not None: + pulumi.set(__self__, "format", format) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if name is not None: + pulumi.set(__self__, "name", name) + if parameter_id is not None: + pulumi.set(__self__, "parameter_id", parameter_id) + if policy_members is not None: + pulumi.set(__self__, "policy_members", policy_members) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the Parameter was created. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def format(self) -> Optional[pulumi.Input[str]]: + """ + The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @format.setter + def format(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "format", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Parameter. Format: + `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> Optional[pulumi.Input[str]]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @parameter_id.setter + def parameter_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_id", value) + + @property + @pulumi.getter(name="policyMembers") + def policy_members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ParameterPolicyMemberArgs']]]]: + """ + Policy member strings of a Google Cloud resource. + Structure is documented below. + """ + return pulumi.get(self, "policy_members") + + @policy_members.setter + def policy_members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ParameterPolicyMemberArgs']]]]): + pulumi.set(self, "policy_members", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the Parameter was updated. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class Parameter(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Parameter Config Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_basic = gcp.parametermanager.Parameter("parameter-basic", parameter_id="parameter") + ``` + ### Parameter With Format + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_with_format = gcp.parametermanager.Parameter("parameter-with-format", + parameter_id="parameter", + format="JSON") + ``` + ### Parameter With Labels + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_with_labels = gcp.parametermanager.Parameter("parameter-with-labels", + parameter_id="parameter", + labels={ + "key1": "val1", + "key2": "val2", + "key3": "val3", + "key4": "val4", + "key5": "val5", + }) + ``` + + ## Import + + Parameter can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + + * `{{project}}/{{parameter_id}}` + + * `{{parameter_id}}` + + When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] format: The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ParameterArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Parameter Config Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_basic = gcp.parametermanager.Parameter("parameter-basic", parameter_id="parameter") + ``` + ### Parameter With Format + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_with_format = gcp.parametermanager.Parameter("parameter-with-format", + parameter_id="parameter", + format="JSON") + ``` + ### Parameter With Labels + + ```python + import pulumi + import pulumi_gcp as gcp + + parameter_with_labels = gcp.parametermanager.Parameter("parameter-with-labels", + parameter_id="parameter", + labels={ + "key1": "val1", + "key2": "val2", + "key3": "val3", + "key4": "val4", + "key5": "val5", + }) + ``` + + ## Import + + Parameter can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + + * `{{project}}/{{parameter_id}}` + + * `{{parameter_id}}` + + When using the `pulumi import` command, Parameter can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default projects/{{project}}/locations/global/parameters/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default {{project}}/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/parameter:Parameter default {{parameter_id}} + ``` + + :param str resource_name: The name of the resource. + :param ParameterArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ParameterArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ParameterArgs.__new__(ParameterArgs) + + __props__.__dict__["format"] = format + __props__.__dict__["labels"] = labels + if parameter_id is None and not opts.urn: + raise TypeError("Missing required property 'parameter_id'") + __props__.__dict__["parameter_id"] = parameter_id + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["policy_members"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Parameter, __self__).__init__( + 'gcp:parametermanager/parameter:Parameter', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + policy_members: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ParameterPolicyMemberArgs', 'ParameterPolicyMemberArgsDict']]]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'Parameter': + """ + Get an existing Parameter resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: The time at which the Parameter was created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] format: The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] name: The resource name of the Parameter. Format: + `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input[Union['ParameterPolicyMemberArgs', 'ParameterPolicyMemberArgsDict']]]] policy_members: Policy member strings of a Google Cloud resource. + Structure is documented below. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time at which the Parameter was updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ParameterState.__new__(_ParameterState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["format"] = format + __props__.__dict__["labels"] = labels + __props__.__dict__["name"] = name + __props__.__dict__["parameter_id"] = parameter_id + __props__.__dict__["policy_members"] = policy_members + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["update_time"] = update_time + return Parameter(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + The time at which the Parameter was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def format(self) -> pulumi.Output[Optional[str]]: + """ + The format type of the parameter resource. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + The labels assigned to this Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the Parameter. Format: + `projects/{{project}}/locations/global/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> pulumi.Output[str]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @property + @pulumi.getter(name="policyMembers") + def policy_members(self) -> pulumi.Output[Sequence['outputs.ParameterPolicyMember']]: + """ + Policy member strings of a Google Cloud resource. + Structure is documented below. + """ + return pulumi.get(self, "policy_members") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + The time at which the Parameter was updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/parametermanager/regional_parameter.py b/sdk/python/pulumi_gcp/parametermanager/regional_parameter.py new file mode 100644 index 0000000000..f1fd622310 --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/regional_parameter.py @@ -0,0 +1,762 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RegionalParameterArgs', 'RegionalParameter'] + +@pulumi.input_type +class RegionalParameterArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + parameter_id: pulumi.Input[str], + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RegionalParameter resource. + :param pulumi.Input[str] location: The location of the regional parameter. eg us-central1 + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[str] format: The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "parameter_id", parameter_id) + if format is not None: + pulumi.set(__self__, "format", format) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the regional parameter. eg us-central1 + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> pulumi.Input[str]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @parameter_id.setter + def parameter_id(self, value: pulumi.Input[str]): + pulumi.set(self, "parameter_id", value) + + @property + @pulumi.getter + def format(self) -> Optional[pulumi.Input[str]]: + """ + The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @format.setter + def format(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "format", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RegionalParameterState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + policy_members: Optional[pulumi.Input[Sequence[pulumi.Input['RegionalParameterPolicyMemberArgs']]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RegionalParameter resources. + :param pulumi.Input[str] create_time: The time at which the regional Parameter was created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] format: The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location of the regional parameter. eg us-central1 + :param pulumi.Input[str] name: The resource name of the regional Parameter. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input['RegionalParameterPolicyMemberArgs']]] policy_members: An object containing a unique resource identity tied to the regional parameter. + Structure is documented below. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time at which the regional Parameter was updated. + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if format is not None: + pulumi.set(__self__, "format", format) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if parameter_id is not None: + pulumi.set(__self__, "parameter_id", parameter_id) + if policy_members is not None: + pulumi.set(__self__, "policy_members", policy_members) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the regional Parameter was created. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def format(self) -> Optional[pulumi.Input[str]]: + """ + The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @format.setter + def format(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "format", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the regional parameter. eg us-central1 + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the regional Parameter. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> Optional[pulumi.Input[str]]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @parameter_id.setter + def parameter_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_id", value) + + @property + @pulumi.getter(name="policyMembers") + def policy_members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RegionalParameterPolicyMemberArgs']]]]: + """ + An object containing a unique resource identity tied to the regional parameter. + Structure is documented below. + """ + return pulumi.get(self, "policy_members") + + @policy_members.setter + def policy_members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RegionalParameterPolicyMemberArgs']]]]): + pulumi.set(self, "policy_members", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the regional Parameter was updated. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class RegionalParameter(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Regional Parameter Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + location="us-central1") + ``` + ### Regional Parameter With Format + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_with_format = gcp.parametermanager.RegionalParameter("regional-parameter-with-format", + parameter_id="regional_parameter", + location="us-central1", + format="JSON") + ``` + ### Regional Parameter With Labels + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_with_labels = gcp.parametermanager.RegionalParameter("regional-parameter-with-labels", + parameter_id="regional_parameter", + location="us-central1", + labels={ + "key1": "val1", + "key2": "val2", + "key3": "val3", + "key4": "val4", + "key5": "val5", + }) + ``` + + ## Import + + RegionalParameter can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + + * `{{project}}/{{location}}/{{parameter_id}}` + + * `{{location}}/{{parameter_id}}` + + When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] format: The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location of the regional parameter. eg us-central1 + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RegionalParameterArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Regional Parameter Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + location="us-central1") + ``` + ### Regional Parameter With Format + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_with_format = gcp.parametermanager.RegionalParameter("regional-parameter-with-format", + parameter_id="regional_parameter", + location="us-central1", + format="JSON") + ``` + ### Regional Parameter With Labels + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_with_labels = gcp.parametermanager.RegionalParameter("regional-parameter-with-labels", + parameter_id="regional_parameter", + location="us-central1", + labels={ + "key1": "val1", + "key2": "val2", + "key3": "val3", + "key4": "val4", + "key5": "val5", + }) + ``` + + ## Import + + RegionalParameter can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + + * `{{project}}/{{location}}/{{parameter_id}}` + + * `{{location}}/{{parameter_id}}` + + When using the `pulumi import` command, RegionalParameter can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{project}}/{{location}}/{{parameter_id}} + ``` + + ```sh + $ pulumi import gcp:parametermanager/regionalParameter:RegionalParameter default {{location}}/{{parameter_id}} + ``` + + :param str resource_name: The name of the resource. + :param RegionalParameterArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RegionalParameterArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RegionalParameterArgs.__new__(RegionalParameterArgs) + + __props__.__dict__["format"] = format + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if parameter_id is None and not opts.urn: + raise TypeError("Missing required property 'parameter_id'") + __props__.__dict__["parameter_id"] = parameter_id + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["policy_members"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(RegionalParameter, __self__).__init__( + 'gcp:parametermanager/regionalParameter:RegionalParameter', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + format: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter_id: Optional[pulumi.Input[str]] = None, + policy_members: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RegionalParameterPolicyMemberArgs', 'RegionalParameterPolicyMemberArgsDict']]]]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'RegionalParameter': + """ + Get an existing RegionalParameter resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: The time at which the regional Parameter was created. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] format: The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + :param pulumi.Input[str] location: The location of the regional parameter. eg us-central1 + :param pulumi.Input[str] name: The resource name of the regional Parameter. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + :param pulumi.Input[str] parameter_id: This must be unique within the project. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input[Union['RegionalParameterPolicyMemberArgs', 'RegionalParameterPolicyMemberArgsDict']]]] policy_members: An object containing a unique resource identity tied to the regional parameter. + Structure is documented below. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] update_time: The time at which the regional Parameter was updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RegionalParameterState.__new__(_RegionalParameterState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["format"] = format + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["parameter_id"] = parameter_id + __props__.__dict__["policy_members"] = policy_members + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["update_time"] = update_time + return RegionalParameter(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + The time at which the regional Parameter was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def format(self) -> pulumi.Output[Optional[str]]: + """ + The format type of the regional parameter. + Default value is `UNFORMATTED`. + Possible values are: `UNFORMATTED`, `YAML`, `JSON`. + """ + return pulumi.get(self, "format") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + The labels assigned to this regional Parameter. + Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}][\\p{Ll}\\p{Lo}\\p{N}_-]{0,62} + Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes, + and must conform to the following PCRE regular expression: [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63} + No more than 64 labels can be assigned to a given resource. + An object containing a list of "key": value pairs. Example: + { "name": "wrench", "mass": "1.3kg", "count": "3" }. + + **Note**: This field is non-authoritative, and will only manage the labels present in your configuration. + Please refer to the field `effective_labels` for all of the labels present on the resource. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the regional parameter. eg us-central1 + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the regional Parameter. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="parameterId") + def parameter_id(self) -> pulumi.Output[str]: + """ + This must be unique within the project. + + + - - - + """ + return pulumi.get(self, "parameter_id") + + @property + @pulumi.getter(name="policyMembers") + def policy_members(self) -> pulumi.Output[Sequence['outputs.RegionalParameterPolicyMember']]: + """ + An object containing a unique resource identity tied to the regional parameter. + Structure is documented below. + """ + return pulumi.get(self, "policy_members") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + The time at which the regional Parameter was updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/parametermanager/regional_parameter_version.py b/sdk/python/pulumi_gcp/parametermanager/regional_parameter_version.py new file mode 100644 index 0000000000..9df45023cc --- /dev/null +++ b/sdk/python/pulumi_gcp/parametermanager/regional_parameter_version.py @@ -0,0 +1,558 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['RegionalParameterVersionArgs', 'RegionalParameterVersion'] + +@pulumi.input_type +class RegionalParameterVersionArgs: + def __init__(__self__, *, + parameter: pulumi.Input[str], + parameter_data: pulumi.Input[str], + parameter_version_id: pulumi.Input[str], + disabled: Optional[pulumi.Input[bool]] = None): + """ + The set of arguments for constructing a RegionalParameterVersion resource. + :param pulumi.Input[str] parameter: Parameter Manager Regional Parameter resource. + :param pulumi.Input[str] parameter_data: The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + :param pulumi.Input[str] parameter_version_id: Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + :param pulumi.Input[bool] disabled: The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + """ + pulumi.set(__self__, "parameter", parameter) + pulumi.set(__self__, "parameter_data", parameter_data) + pulumi.set(__self__, "parameter_version_id", parameter_version_id) + if disabled is not None: + pulumi.set(__self__, "disabled", disabled) + + @property + @pulumi.getter + def parameter(self) -> pulumi.Input[str]: + """ + Parameter Manager Regional Parameter resource. + """ + return pulumi.get(self, "parameter") + + @parameter.setter + def parameter(self, value: pulumi.Input[str]): + pulumi.set(self, "parameter", value) + + @property + @pulumi.getter(name="parameterData") + def parameter_data(self) -> pulumi.Input[str]: + """ + The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + """ + return pulumi.get(self, "parameter_data") + + @parameter_data.setter + def parameter_data(self, value: pulumi.Input[str]): + pulumi.set(self, "parameter_data", value) + + @property + @pulumi.getter(name="parameterVersionId") + def parameter_version_id(self) -> pulumi.Input[str]: + """ + Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + """ + return pulumi.get(self, "parameter_version_id") + + @parameter_version_id.setter + def parameter_version_id(self, value: pulumi.Input[str]): + pulumi.set(self, "parameter_version_id", value) + + @property + @pulumi.getter + def disabled(self) -> Optional[pulumi.Input[bool]]: + """ + The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + """ + return pulumi.get(self, "disabled") + + @disabled.setter + def disabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disabled", value) + + +@pulumi.input_type +class _RegionalParameterVersionState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter: Optional[pulumi.Input[str]] = None, + parameter_data: Optional[pulumi.Input[str]] = None, + parameter_version_id: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RegionalParameterVersion resources. + :param pulumi.Input[str] create_time: The time at which the Regional Parameter Version was created. + :param pulumi.Input[bool] disabled: The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + :param pulumi.Input[str] location: Location of Parameter Manager Regional parameter resource. + :param pulumi.Input[str] name: The resource name of the Regional Parameter Version. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + :param pulumi.Input[str] parameter: Parameter Manager Regional Parameter resource. + :param pulumi.Input[str] parameter_data: The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + :param pulumi.Input[str] parameter_version_id: Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + :param pulumi.Input[str] update_time: The time at which the Regional Parameter Version was updated. + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if disabled is not None: + pulumi.set(__self__, "disabled", disabled) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if parameter is not None: + pulumi.set(__self__, "parameter", parameter) + if parameter_data is not None: + pulumi.set(__self__, "parameter_data", parameter_data) + if parameter_version_id is not None: + pulumi.set(__self__, "parameter_version_id", parameter_version_id) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the Regional Parameter Version was created. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter + def disabled(self) -> Optional[pulumi.Input[bool]]: + """ + The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + """ + return pulumi.get(self, "disabled") + + @disabled.setter + def disabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disabled", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Location of Parameter Manager Regional parameter resource. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Regional Parameter Version. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def parameter(self) -> Optional[pulumi.Input[str]]: + """ + Parameter Manager Regional Parameter resource. + """ + return pulumi.get(self, "parameter") + + @parameter.setter + def parameter(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter", value) + + @property + @pulumi.getter(name="parameterData") + def parameter_data(self) -> Optional[pulumi.Input[str]]: + """ + The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + """ + return pulumi.get(self, "parameter_data") + + @parameter_data.setter + def parameter_data(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_data", value) + + @property + @pulumi.getter(name="parameterVersionId") + def parameter_version_id(self) -> Optional[pulumi.Input[str]]: + """ + Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + """ + return pulumi.get(self, "parameter_version_id") + + @parameter_version_id.setter + def parameter_version_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_version_id", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + The time at which the Regional Parameter Version was updated. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class RegionalParameterVersion(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + disabled: Optional[pulumi.Input[bool]] = None, + parameter: Optional[pulumi.Input[str]] = None, + parameter_data: Optional[pulumi.Input[str]] = None, + parameter_version_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Regional Parameter Version Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + location="us-central1") + regional_parameter_version_basic = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-basic", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data="regional-parameter-version-data") + ``` + ### Regional Parameter Version With Json Format + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_std as std + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + format="JSON", + location="us-central1") + regional_parameter_version_with_json_format = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-json-format", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data=std.file(input="parameter_data_json_format.yaml").result) + ``` + ### Regional Parameter Version With Yaml Format + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_std as std + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + format="YAML", + location="us-central1") + regional_parameter_version_with_yaml_format = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-yaml-format", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data=std.file(input="parameter_data_yaml_format.yaml").result) + ``` + + ## Import + + RegionalParameterVersion can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + + When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] disabled: The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + :param pulumi.Input[str] parameter: Parameter Manager Regional Parameter resource. + :param pulumi.Input[str] parameter_data: The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + :param pulumi.Input[str] parameter_version_id: Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RegionalParameterVersionArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Regional Parameter Version Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + location="us-central1") + regional_parameter_version_basic = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-basic", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data="regional-parameter-version-data") + ``` + ### Regional Parameter Version With Json Format + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_std as std + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + format="JSON", + location="us-central1") + regional_parameter_version_with_json_format = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-json-format", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data=std.file(input="parameter_data_json_format.yaml").result) + ``` + ### Regional Parameter Version With Yaml Format + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_std as std + + regional_parameter_basic = gcp.parametermanager.RegionalParameter("regional-parameter-basic", + parameter_id="regional_parameter", + format="YAML", + location="us-central1") + regional_parameter_version_with_yaml_format = gcp.parametermanager.RegionalParameterVersion("regional-parameter-version-with-yaml-format", + parameter=regional_parameter_basic.id, + parameter_version_id="regional_parameter_version", + parameter_data=std.file(input="parameter_data_yaml_format.yaml").result) + ``` + + ## Import + + RegionalParameterVersion can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + + When using the `pulumi import` command, RegionalParameterVersion can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion default projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}} + ``` + + :param str resource_name: The name of the resource. + :param RegionalParameterVersionArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RegionalParameterVersionArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + disabled: Optional[pulumi.Input[bool]] = None, + parameter: Optional[pulumi.Input[str]] = None, + parameter_data: Optional[pulumi.Input[str]] = None, + parameter_version_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RegionalParameterVersionArgs.__new__(RegionalParameterVersionArgs) + + __props__.__dict__["disabled"] = disabled + if parameter is None and not opts.urn: + raise TypeError("Missing required property 'parameter'") + __props__.__dict__["parameter"] = parameter + if parameter_data is None and not opts.urn: + raise TypeError("Missing required property 'parameter_data'") + __props__.__dict__["parameter_data"] = None if parameter_data is None else pulumi.Output.secret(parameter_data) + if parameter_version_id is None and not opts.urn: + raise TypeError("Missing required property 'parameter_version_id'") + __props__.__dict__["parameter_version_id"] = parameter_version_id + __props__.__dict__["create_time"] = None + __props__.__dict__["location"] = None + __props__.__dict__["name"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["parameterData"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(RegionalParameterVersion, __self__).__init__( + 'gcp:parametermanager/regionalParameterVersion:RegionalParameterVersion', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parameter: Optional[pulumi.Input[str]] = None, + parameter_data: Optional[pulumi.Input[str]] = None, + parameter_version_id: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'RegionalParameterVersion': + """ + Get an existing RegionalParameterVersion resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: The time at which the Regional Parameter Version was created. + :param pulumi.Input[bool] disabled: The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + :param pulumi.Input[str] location: Location of Parameter Manager Regional parameter resource. + :param pulumi.Input[str] name: The resource name of the Regional Parameter Version. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + :param pulumi.Input[str] parameter: Parameter Manager Regional Parameter resource. + :param pulumi.Input[str] parameter_data: The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + :param pulumi.Input[str] parameter_version_id: Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + :param pulumi.Input[str] update_time: The time at which the Regional Parameter Version was updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RegionalParameterVersionState.__new__(_RegionalParameterVersionState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["disabled"] = disabled + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["parameter"] = parameter + __props__.__dict__["parameter_data"] = parameter_data + __props__.__dict__["parameter_version_id"] = parameter_version_id + __props__.__dict__["update_time"] = update_time + return RegionalParameterVersion(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + The time at which the Regional Parameter Version was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def disabled(self) -> pulumi.Output[Optional[bool]]: + """ + The current state of Regional Parameter Version. This field is only applicable for updating Regional Parameter Version. + """ + return pulumi.get(self, "disabled") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + Location of Parameter Manager Regional parameter resource. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The resource name of the Regional Parameter Version. Format: + `projects/{{project}}/locations/{{location}}/parameters/{{parameter_id}}/versions/{{parameter_version_id}}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def parameter(self) -> pulumi.Output[str]: + """ + Parameter Manager Regional Parameter resource. + """ + return pulumi.get(self, "parameter") + + @property + @pulumi.getter(name="parameterData") + def parameter_data(self) -> pulumi.Output[str]: + """ + The Regional Parameter data. + **Note**: This property is sensitive and will not be displayed in the plan. + """ + return pulumi.get(self, "parameter_data") + + @property + @pulumi.getter(name="parameterVersionId") + def parameter_version_id(self) -> pulumi.Output[str]: + """ + Version ID of the Regional Parameter Version Resource. This must be unique within the Regional Parameter. + + + - - - + """ + return pulumi.get(self, "parameter_version_id") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + The time at which the Regional Parameter Version was updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/provider.py b/sdk/python/pulumi_gcp/provider.py index 81c1be74eb..c4825dc274 100644 --- a/sdk/python/pulumi_gcp/provider.py +++ b/sdk/python/pulumi_gcp/provider.py @@ -67,6 +67,7 @@ def __init__(__self__, *, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddomains_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, + colab_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, compute_custom_endpoint: Optional[pulumi.Input[str]] = None, container_analysis_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -151,6 +152,8 @@ def __init__(__self__, *, os_config_custom_endpoint: Optional[pulumi.Input[str]] = None, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_regional_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -298,6 +301,8 @@ def __init__(__self__, *, pulumi.set(__self__, "clouddomains_custom_endpoint", clouddomains_custom_endpoint) if cloudfunctions2_custom_endpoint is not None: pulumi.set(__self__, "cloudfunctions2_custom_endpoint", cloudfunctions2_custom_endpoint) + if colab_custom_endpoint is not None: + pulumi.set(__self__, "colab_custom_endpoint", colab_custom_endpoint) if composer_custom_endpoint is not None: pulumi.set(__self__, "composer_custom_endpoint", composer_custom_endpoint) if compute_custom_endpoint is not None: @@ -466,6 +471,10 @@ def __init__(__self__, *, pulumi.set(__self__, "os_login_custom_endpoint", os_login_custom_endpoint) if parallelstore_custom_endpoint is not None: pulumi.set(__self__, "parallelstore_custom_endpoint", parallelstore_custom_endpoint) + if parameter_manager_custom_endpoint is not None: + pulumi.set(__self__, "parameter_manager_custom_endpoint", parameter_manager_custom_endpoint) + if parameter_manager_regional_custom_endpoint is not None: + pulumi.set(__self__, "parameter_manager_regional_custom_endpoint", parameter_manager_regional_custom_endpoint) if privateca_custom_endpoint is not None: pulumi.set(__self__, "privateca_custom_endpoint", privateca_custom_endpoint) if privileged_access_manager_custom_endpoint is not None: @@ -996,6 +1005,15 @@ def cloudfunctions2_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def cloudfunctions2_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "cloudfunctions2_custom_endpoint", value) + @property + @pulumi.getter(name="colabCustomEndpoint") + def colab_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "colab_custom_endpoint") + + @colab_custom_endpoint.setter + def colab_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "colab_custom_endpoint", value) + @property @pulumi.getter(name="composerCustomEndpoint") def composer_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -1752,6 +1770,24 @@ def parallelstore_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def parallelstore_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "parallelstore_custom_endpoint", value) + @property + @pulumi.getter(name="parameterManagerCustomEndpoint") + def parameter_manager_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "parameter_manager_custom_endpoint") + + @parameter_manager_custom_endpoint.setter + def parameter_manager_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_manager_custom_endpoint", value) + + @property + @pulumi.getter(name="parameterManagerRegionalCustomEndpoint") + def parameter_manager_regional_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "parameter_manager_regional_custom_endpoint") + + @parameter_manager_regional_custom_endpoint.setter + def parameter_manager_regional_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parameter_manager_regional_custom_endpoint", value) + @property @pulumi.getter(name="privatecaCustomEndpoint") def privateca_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -2255,6 +2291,7 @@ def __init__(__self__, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddomains_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, + colab_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, compute_custom_endpoint: Optional[pulumi.Input[str]] = None, container_analysis_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2339,6 +2376,8 @@ def __init__(__self__, os_config_custom_endpoint: Optional[pulumi.Input[str]] = None, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_regional_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -2473,6 +2512,7 @@ def _internal_init(__self__, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddomains_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, + colab_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, compute_custom_endpoint: Optional[pulumi.Input[str]] = None, container_analysis_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2557,6 +2597,8 @@ def _internal_init(__self__, os_config_custom_endpoint: Optional[pulumi.Input[str]] = None, os_login_custom_endpoint: Optional[pulumi.Input[str]] = None, parallelstore_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, + parameter_manager_regional_custom_endpoint: Optional[pulumi.Input[str]] = None, privateca_custom_endpoint: Optional[pulumi.Input[str]] = None, privileged_access_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -2663,6 +2705,7 @@ def _internal_init(__self__, __props__.__dict__["clouddeploy_custom_endpoint"] = clouddeploy_custom_endpoint __props__.__dict__["clouddomains_custom_endpoint"] = clouddomains_custom_endpoint __props__.__dict__["cloudfunctions2_custom_endpoint"] = cloudfunctions2_custom_endpoint + __props__.__dict__["colab_custom_endpoint"] = colab_custom_endpoint __props__.__dict__["composer_custom_endpoint"] = composer_custom_endpoint __props__.__dict__["compute_custom_endpoint"] = compute_custom_endpoint __props__.__dict__["container_analysis_custom_endpoint"] = container_analysis_custom_endpoint @@ -2747,6 +2790,8 @@ def _internal_init(__self__, __props__.__dict__["os_config_custom_endpoint"] = os_config_custom_endpoint __props__.__dict__["os_login_custom_endpoint"] = os_login_custom_endpoint __props__.__dict__["parallelstore_custom_endpoint"] = parallelstore_custom_endpoint + __props__.__dict__["parameter_manager_custom_endpoint"] = parameter_manager_custom_endpoint + __props__.__dict__["parameter_manager_regional_custom_endpoint"] = parameter_manager_regional_custom_endpoint __props__.__dict__["privateca_custom_endpoint"] = privateca_custom_endpoint __props__.__dict__["privileged_access_manager_custom_endpoint"] = privileged_access_manager_custom_endpoint if project is None: @@ -3036,6 +3081,11 @@ def clouddomains_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def cloudfunctions2_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "cloudfunctions2_custom_endpoint") + @property + @pulumi.getter(name="colabCustomEndpoint") + def colab_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "colab_custom_endpoint") + @property @pulumi.getter(name="composerCustomEndpoint") def composer_custom_endpoint(self) -> pulumi.Output[Optional[str]]: @@ -3441,6 +3491,16 @@ def os_login_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def parallelstore_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "parallelstore_custom_endpoint") + @property + @pulumi.getter(name="parameterManagerCustomEndpoint") + def parameter_manager_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "parameter_manager_custom_endpoint") + + @property + @pulumi.getter(name="parameterManagerRegionalCustomEndpoint") + def parameter_manager_regional_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "parameter_manager_regional_custom_endpoint") + @property @pulumi.getter(name="privatecaCustomEndpoint") def privateca_custom_endpoint(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/pubsub/subscription.py b/sdk/python/pulumi_gcp/pubsub/subscription.py index a3ef7bac53..c1708917dd 100644 --- a/sdk/python/pulumi_gcp/pubsub/subscription.py +++ b/sdk/python/pulumi_gcp/pubsub/subscription.py @@ -1113,7 +1113,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_69391", + "filename_suffix": "-_8270", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1146,7 +1146,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_8270", + "filename_suffix": "-_41150", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1185,7 +1185,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_41150", + "filename_suffix": "-_89313", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1553,7 +1553,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_69391", + "filename_suffix": "-_8270", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1586,7 +1586,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_8270", + "filename_suffix": "-_41150", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1625,7 +1625,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_41150", + "filename_suffix": "-_89313", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", diff --git a/sdk/python/pulumi_gcp/sql/_inputs.py b/sdk/python/pulumi_gcp/sql/_inputs.py index 6c7057e267..357b7f7f16 100644 --- a/sdk/python/pulumi_gcp/sql/_inputs.py +++ b/sdk/python/pulumi_gcp/sql/_inputs.py @@ -21,6 +21,8 @@ 'DatabaseInstanceIpAddressArgsDict', 'DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict', + 'DatabaseInstanceReplicationClusterArgs', + 'DatabaseInstanceReplicationClusterArgsDict', 'DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict', 'DatabaseInstanceServerCaCertArgs', @@ -555,6 +557,58 @@ def verify_server_certificate(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "verify_server_certificate", value) +if not MYPY: + class DatabaseInstanceReplicationClusterArgsDict(TypedDict): + dr_replica: NotRequired[pulumi.Input[bool]] + """ + Read-only field that indicates whether the replica is a DR replica. + """ + failover_dr_replica_name: NotRequired[pulumi.Input[str]] + """ + If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ +elif False: + DatabaseInstanceReplicationClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class DatabaseInstanceReplicationClusterArgs: + def __init__(__self__, *, + dr_replica: Optional[pulumi.Input[bool]] = None, + failover_dr_replica_name: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[bool] dr_replica: Read-only field that indicates whether the replica is a DR replica. + :param pulumi.Input[str] failover_dr_replica_name: If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + if dr_replica is not None: + pulumi.set(__self__, "dr_replica", dr_replica) + if failover_dr_replica_name is not None: + pulumi.set(__self__, "failover_dr_replica_name", failover_dr_replica_name) + + @property + @pulumi.getter(name="drReplica") + def dr_replica(self) -> Optional[pulumi.Input[bool]]: + """ + Read-only field that indicates whether the replica is a DR replica. + """ + return pulumi.get(self, "dr_replica") + + @dr_replica.setter + def dr_replica(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "dr_replica", value) + + @property + @pulumi.getter(name="failoverDrReplicaName") + def failover_dr_replica_name(self) -> Optional[pulumi.Input[str]]: + """ + If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + return pulumi.get(self, "failover_dr_replica_name") + + @failover_dr_replica_name.setter + def failover_dr_replica_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "failover_dr_replica_name", value) + + if not MYPY: class DatabaseInstanceRestoreBackupContextArgsDict(TypedDict): backup_run_id: pulumi.Input[int] diff --git a/sdk/python/pulumi_gcp/sql/database_instance.py b/sdk/python/pulumi_gcp/sql/database_instance.py index 48a2bdea04..50c9c244f9 100644 --- a/sdk/python/pulumi_gcp/sql/database_instance.py +++ b/sdk/python/pulumi_gcp/sql/database_instance.py @@ -33,6 +33,7 @@ def __init__(__self__, *, region: Optional[pulumi.Input[str]] = None, replica_configuration: Optional[pulumi.Input['DatabaseInstanceReplicaConfigurationArgs']] = None, replica_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + replication_cluster: Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']] = None, restore_backup_context: Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']] = None, root_password: Optional[pulumi.Input[str]] = None, settings: Optional[pulumi.Input['DatabaseInstanceSettingsArgs']] = None): @@ -78,6 +79,8 @@ def __init__(__self__, *, :param pulumi.Input['DatabaseInstanceReplicaConfigurationArgs'] replica_configuration: The configuration for replication. The configuration is detailed below. :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_names: List of replica names. Can be updated. + :param pulumi.Input['DatabaseInstanceReplicationClusterArgs'] replication_cluster: A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. :param pulumi.Input['DatabaseInstanceRestoreBackupContextArgs'] restore_backup_context: The context needed to restore the database to a backup run. This field will cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -109,6 +112,8 @@ def __init__(__self__, *, pulumi.set(__self__, "replica_configuration", replica_configuration) if replica_names is not None: pulumi.set(__self__, "replica_names", replica_names) + if replication_cluster is not None: + pulumi.set(__self__, "replication_cluster", replication_cluster) if restore_backup_context is not None: pulumi.set(__self__, "restore_backup_context", restore_backup_context) if root_password is not None: @@ -288,6 +293,19 @@ def replica_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: def replica_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): pulumi.set(self, "replica_names", value) + @property + @pulumi.getter(name="replicationCluster") + def replication_cluster(self) -> Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']]: + """ + A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. + """ + return pulumi.get(self, "replication_cluster") + + @replication_cluster.setter + def replication_cluster(self, value: Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']]): + pulumi.set(self, "replication_cluster", value) + @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']]: @@ -352,6 +370,7 @@ def __init__(__self__, *, region: Optional[pulumi.Input[str]] = None, replica_configuration: Optional[pulumi.Input['DatabaseInstanceReplicaConfigurationArgs']] = None, replica_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + replication_cluster: Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']] = None, restore_backup_context: Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']] = None, root_password: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, @@ -408,6 +427,8 @@ def __init__(__self__, *, :param pulumi.Input['DatabaseInstanceReplicaConfigurationArgs'] replica_configuration: The configuration for replication. The configuration is detailed below. :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_names: List of replica names. Can be updated. + :param pulumi.Input['DatabaseInstanceReplicationClusterArgs'] replication_cluster: A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. :param pulumi.Input['DatabaseInstanceRestoreBackupContextArgs'] restore_backup_context: The context needed to restore the database to a backup run. This field will cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -459,6 +480,8 @@ def __init__(__self__, *, pulumi.set(__self__, "replica_configuration", replica_configuration) if replica_names is not None: pulumi.set(__self__, "replica_names", replica_names) + if replication_cluster is not None: + pulumi.set(__self__, "replication_cluster", replication_cluster) if restore_backup_context is not None: pulumi.set(__self__, "restore_backup_context", restore_backup_context) if root_password is not None: @@ -738,6 +761,19 @@ def replica_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: def replica_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): pulumi.set(self, "replica_names", value) + @property + @pulumi.getter(name="replicationCluster") + def replication_cluster(self) -> Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']]: + """ + A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. + """ + return pulumi.get(self, "replication_cluster") + + @replication_cluster.setter + def replication_cluster(self, value: Optional[pulumi.Input['DatabaseInstanceReplicationClusterArgs']]): + pulumi.set(self, "replication_cluster", value) + @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']]: @@ -830,6 +866,7 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, replica_configuration: Optional[pulumi.Input[Union['DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict']]] = None, replica_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + replication_cluster: Optional[pulumi.Input[Union['DatabaseInstanceReplicationClusterArgs', 'DatabaseInstanceReplicationClusterArgsDict']]] = None, restore_backup_context: Optional[pulumi.Input[Union['DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict']]] = None, root_password: Optional[pulumi.Input[str]] = None, settings: Optional[pulumi.Input[Union['DatabaseInstanceSettingsArgs', 'DatabaseInstanceSettingsArgsDict']]] = None, @@ -973,9 +1010,9 @@ def __init__(__self__, }) ``` - ## Switchover (SQL Server Only) + ## Switchover - Users can perform a switchover on any direct `cascadable` replica by following the steps below. + Users can perform a switchover on a replica by following the steps below. ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. @@ -983,22 +1020,26 @@ def __init__(__self__, ### Steps to Invoke Switchover - Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) + MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. + + SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) #### Invoking switchover in the replica resource: 1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` 2. Remove `master_instance_name` - 3. Remove `replica_configuration` + 3. (SQL Server) Remove `replica_configuration` 4. Add current primary's name to the replica's `replica_names` list + 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. + 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. #### Updating the primary resource: 1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` 2. Set `master_instance_name` to the original replica (which will be primary after switchover) - 3. Set `replica_configuration` and set `cascadable_replica` to `true` + 3. (SQL Server) Set `replica_configuration` and set `cascadable_replica` to `true` 4. Remove original replica from `replica_names` - - > **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. - + * **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. + 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. + 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. #### Plan and verify that: - `pulumi preview` outputs **"0 to add, 0 to destroy"** - `pulumi preview` does not say **"must be replaced"** for any resource @@ -1078,6 +1119,8 @@ def __init__(__self__, :param pulumi.Input[Union['DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict']] replica_configuration: The configuration for replication. The configuration is detailed below. :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_names: List of replica names. Can be updated. + :param pulumi.Input[Union['DatabaseInstanceReplicationClusterArgs', 'DatabaseInstanceReplicationClusterArgsDict']] replication_cluster: A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. :param pulumi.Input[Union['DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict']] restore_backup_context: The context needed to restore the database to a backup run. This field will cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -1231,9 +1274,9 @@ def __init__(__self__, }) ``` - ## Switchover (SQL Server Only) + ## Switchover - Users can perform a switchover on any direct `cascadable` replica by following the steps below. + Users can perform a switchover on a replica by following the steps below. ~>**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below. @@ -1241,22 +1284,26 @@ def __init__(__self__, ### Steps to Invoke Switchover - Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) + MySQL/PostgreSQL: Create a cross-region, Enterprise Plus edition primary and replica pair, then set the value of primary's `replication_cluster.failover_dr_replica_name` as the replica. + + SQL Server: Create a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`) #### Invoking switchover in the replica resource: 1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE` 2. Remove `master_instance_name` - 3. Remove `replica_configuration` + 3. (SQL Server) Remove `replica_configuration` 4. Add current primary's name to the replica's `replica_names` list + 5. (MySQL/PostgreSQL) Add current primary's name to the replica's `replication_cluster.failover_dr_replica_name`. + 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. #### Updating the primary resource: 1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE` 2. Set `master_instance_name` to the original replica (which will be primary after switchover) - 3. Set `replica_configuration` and set `cascadable_replica` to `true` + 3. (SQL Server) Set `replica_configuration` and set `cascadable_replica` to `true` 4. Remove original replica from `replica_names` - - > **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. - + * **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas. + 5. (MySQL/PostgreSQL) Set `replication_cluster.failover_dr_replica_name` as the empty string. + 6. (MySQL/PostgreSQL) Adjust `backup_configuration`. See Switchover Guide for details. #### Plan and verify that: - `pulumi preview` outputs **"0 to add, 0 to destroy"** - `pulumi preview` does not say **"must be replaced"** for any resource @@ -1321,6 +1368,7 @@ def _internal_init(__self__, region: Optional[pulumi.Input[str]] = None, replica_configuration: Optional[pulumi.Input[Union['DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict']]] = None, replica_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + replication_cluster: Optional[pulumi.Input[Union['DatabaseInstanceReplicationClusterArgs', 'DatabaseInstanceReplicationClusterArgsDict']]] = None, restore_backup_context: Optional[pulumi.Input[Union['DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict']]] = None, root_password: Optional[pulumi.Input[str]] = None, settings: Optional[pulumi.Input[Union['DatabaseInstanceSettingsArgs', 'DatabaseInstanceSettingsArgsDict']]] = None, @@ -1347,6 +1395,7 @@ def _internal_init(__self__, __props__.__dict__["region"] = region __props__.__dict__["replica_configuration"] = None if replica_configuration is None else pulumi.Output.secret(replica_configuration) __props__.__dict__["replica_names"] = replica_names + __props__.__dict__["replication_cluster"] = replication_cluster __props__.__dict__["restore_backup_context"] = restore_backup_context __props__.__dict__["root_password"] = None if root_password is None else pulumi.Output.secret(root_password) __props__.__dict__["settings"] = settings @@ -1393,6 +1442,7 @@ def get(resource_name: str, region: Optional[pulumi.Input[str]] = None, replica_configuration: Optional[pulumi.Input[Union['DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict']]] = None, replica_names: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + replication_cluster: Optional[pulumi.Input[Union['DatabaseInstanceReplicationClusterArgs', 'DatabaseInstanceReplicationClusterArgsDict']]] = None, restore_backup_context: Optional[pulumi.Input[Union['DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict']]] = None, root_password: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, @@ -1454,6 +1504,8 @@ def get(resource_name: str, :param pulumi.Input[Union['DatabaseInstanceReplicaConfigurationArgs', 'DatabaseInstanceReplicaConfigurationArgsDict']] replica_configuration: The configuration for replication. The configuration is detailed below. :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_names: List of replica names. Can be updated. + :param pulumi.Input[Union['DatabaseInstanceReplicationClusterArgs', 'DatabaseInstanceReplicationClusterArgsDict']] replication_cluster: A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. :param pulumi.Input[Union['DatabaseInstanceRestoreBackupContextArgs', 'DatabaseInstanceRestoreBackupContextArgsDict']] restore_backup_context: The context needed to restore the database to a backup run. This field will cause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below. **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this @@ -1489,6 +1541,7 @@ def get(resource_name: str, __props__.__dict__["region"] = region __props__.__dict__["replica_configuration"] = replica_configuration __props__.__dict__["replica_names"] = replica_names + __props__.__dict__["replication_cluster"] = replication_cluster __props__.__dict__["restore_backup_context"] = restore_backup_context __props__.__dict__["root_password"] = root_password __props__.__dict__["self_link"] = self_link @@ -1683,6 +1736,15 @@ def replica_names(self) -> pulumi.Output[Sequence[str]]: """ return pulumi.get(self, "replica_names") + @property + @pulumi.getter(name="replicationCluster") + def replication_cluster(self) -> pulumi.Output['outputs.DatabaseInstanceReplicationCluster']: + """ + A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only + after both the primary and replica are created. + """ + return pulumi.get(self, "replication_cluster") + @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> pulumi.Output[Optional['outputs.DatabaseInstanceRestoreBackupContext']]: diff --git a/sdk/python/pulumi_gcp/sql/get_database_instance.py b/sdk/python/pulumi_gcp/sql/get_database_instance.py index 2089936c2d..6b881fba20 100644 --- a/sdk/python/pulumi_gcp/sql/get_database_instance.py +++ b/sdk/python/pulumi_gcp/sql/get_database_instance.py @@ -27,7 +27,7 @@ class GetDatabaseInstanceResult: """ A collection of values returned by getDatabaseInstance. """ - def __init__(__self__, available_maintenance_versions=None, clones=None, connection_name=None, database_version=None, deletion_protection=None, dns_name=None, encryption_key_name=None, first_ip_address=None, id=None, instance_type=None, ip_addresses=None, maintenance_version=None, master_instance_name=None, name=None, private_ip_address=None, project=None, psc_service_attachment_link=None, public_ip_address=None, region=None, replica_configurations=None, replica_names=None, restore_backup_contexts=None, root_password=None, self_link=None, server_ca_certs=None, service_account_email_address=None, settings=None): + def __init__(__self__, available_maintenance_versions=None, clones=None, connection_name=None, database_version=None, deletion_protection=None, dns_name=None, encryption_key_name=None, first_ip_address=None, id=None, instance_type=None, ip_addresses=None, maintenance_version=None, master_instance_name=None, name=None, private_ip_address=None, project=None, psc_service_attachment_link=None, public_ip_address=None, region=None, replica_configurations=None, replica_names=None, replication_clusters=None, restore_backup_contexts=None, root_password=None, self_link=None, server_ca_certs=None, service_account_email_address=None, settings=None): if available_maintenance_versions and not isinstance(available_maintenance_versions, list): raise TypeError("Expected argument 'available_maintenance_versions' to be a list") pulumi.set(__self__, "available_maintenance_versions", available_maintenance_versions) @@ -91,6 +91,9 @@ def __init__(__self__, available_maintenance_versions=None, clones=None, connect if replica_names and not isinstance(replica_names, list): raise TypeError("Expected argument 'replica_names' to be a list") pulumi.set(__self__, "replica_names", replica_names) + if replication_clusters and not isinstance(replication_clusters, list): + raise TypeError("Expected argument 'replication_clusters' to be a list") + pulumi.set(__self__, "replication_clusters", replication_clusters) if restore_backup_contexts and not isinstance(restore_backup_contexts, list): raise TypeError("Expected argument 'restore_backup_contexts' to be a list") pulumi.set(__self__, "restore_backup_contexts", restore_backup_contexts) @@ -218,6 +221,11 @@ def replica_configurations(self) -> Sequence['outputs.GetDatabaseInstanceReplica def replica_names(self) -> Sequence[str]: return pulumi.get(self, "replica_names") + @property + @pulumi.getter(name="replicationClusters") + def replication_clusters(self) -> Sequence['outputs.GetDatabaseInstanceReplicationClusterResult']: + return pulumi.get(self, "replication_clusters") + @property @pulumi.getter(name="restoreBackupContexts") def restore_backup_contexts(self) -> Sequence['outputs.GetDatabaseInstanceRestoreBackupContextResult']: @@ -276,6 +284,7 @@ def __await__(self): region=self.region, replica_configurations=self.replica_configurations, replica_names=self.replica_names, + replication_clusters=self.replication_clusters, restore_backup_contexts=self.restore_backup_contexts, root_password=self.root_password, self_link=self.self_link, @@ -331,6 +340,7 @@ def get_database_instance(name: Optional[str] = None, region=pulumi.get(__ret__, 'region'), replica_configurations=pulumi.get(__ret__, 'replica_configurations'), replica_names=pulumi.get(__ret__, 'replica_names'), + replication_clusters=pulumi.get(__ret__, 'replication_clusters'), restore_backup_contexts=pulumi.get(__ret__, 'restore_backup_contexts'), root_password=pulumi.get(__ret__, 'root_password'), self_link=pulumi.get(__ret__, 'self_link'), @@ -383,6 +393,7 @@ def get_database_instance_output(name: Optional[pulumi.Input[str]] = None, region=pulumi.get(__response__, 'region'), replica_configurations=pulumi.get(__response__, 'replica_configurations'), replica_names=pulumi.get(__response__, 'replica_names'), + replication_clusters=pulumi.get(__response__, 'replication_clusters'), restore_backup_contexts=pulumi.get(__response__, 'restore_backup_contexts'), root_password=pulumi.get(__response__, 'root_password'), self_link=pulumi.get(__response__, 'self_link'), diff --git a/sdk/python/pulumi_gcp/sql/outputs.py b/sdk/python/pulumi_gcp/sql/outputs.py index f9e028822b..5db40afa69 100644 --- a/sdk/python/pulumi_gcp/sql/outputs.py +++ b/sdk/python/pulumi_gcp/sql/outputs.py @@ -19,6 +19,7 @@ 'DatabaseInstanceClone', 'DatabaseInstanceIpAddress', 'DatabaseInstanceReplicaConfiguration', + 'DatabaseInstanceReplicationCluster', 'DatabaseInstanceRestoreBackupContext', 'DatabaseInstanceServerCaCert', 'DatabaseInstanceSettings', @@ -45,6 +46,7 @@ 'GetDatabaseInstanceCloneResult', 'GetDatabaseInstanceIpAddressResult', 'GetDatabaseInstanceReplicaConfigurationResult', + 'GetDatabaseInstanceReplicationClusterResult', 'GetDatabaseInstanceRestoreBackupContextResult', 'GetDatabaseInstanceServerCaCertResult', 'GetDatabaseInstanceSettingResult', @@ -68,6 +70,7 @@ 'GetDatabaseInstancesInstanceCloneResult', 'GetDatabaseInstancesInstanceIpAddressResult', 'GetDatabaseInstancesInstanceReplicaConfigurationResult', + 'GetDatabaseInstancesInstanceReplicationClusterResult', 'GetDatabaseInstancesInstanceRestoreBackupContextResult', 'GetDatabaseInstancesInstanceServerCaCertResult', 'GetDatabaseInstancesInstanceSettingResult', @@ -464,6 +467,56 @@ def verify_server_certificate(self) -> Optional[bool]: return pulumi.get(self, "verify_server_certificate") +@pulumi.output_type +class DatabaseInstanceReplicationCluster(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "drReplica": + suggest = "dr_replica" + elif key == "failoverDrReplicaName": + suggest = "failover_dr_replica_name" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in DatabaseInstanceReplicationCluster. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + DatabaseInstanceReplicationCluster.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + DatabaseInstanceReplicationCluster.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + dr_replica: Optional[bool] = None, + failover_dr_replica_name: Optional[str] = None): + """ + :param bool dr_replica: Read-only field that indicates whether the replica is a DR replica. + :param str failover_dr_replica_name: If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + if dr_replica is not None: + pulumi.set(__self__, "dr_replica", dr_replica) + if failover_dr_replica_name is not None: + pulumi.set(__self__, "failover_dr_replica_name", failover_dr_replica_name) + + @property + @pulumi.getter(name="drReplica") + def dr_replica(self) -> Optional[bool]: + """ + Read-only field that indicates whether the replica is a DR replica. + """ + return pulumi.get(self, "dr_replica") + + @property + @pulumi.getter(name="failoverDrReplicaName") + def failover_dr_replica_name(self) -> Optional[str]: + """ + If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + return pulumi.get(self, "failover_dr_replica_name") + + @pulumi.output_type class DatabaseInstanceRestoreBackupContext(dict): @staticmethod @@ -2557,6 +2610,35 @@ def verify_server_certificate(self) -> bool: return pulumi.get(self, "verify_server_certificate") +@pulumi.output_type +class GetDatabaseInstanceReplicationClusterResult(dict): + def __init__(__self__, *, + dr_replica: bool, + failover_dr_replica_name: str): + """ + :param bool dr_replica: Read-only field that indicates whether the replica is a DR replica. + :param str failover_dr_replica_name: If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + pulumi.set(__self__, "dr_replica", dr_replica) + pulumi.set(__self__, "failover_dr_replica_name", failover_dr_replica_name) + + @property + @pulumi.getter(name="drReplica") + def dr_replica(self) -> bool: + """ + Read-only field that indicates whether the replica is a DR replica. + """ + return pulumi.get(self, "dr_replica") + + @property + @pulumi.getter(name="failoverDrReplicaName") + def failover_dr_replica_name(self) -> str: + """ + If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + return pulumi.get(self, "failover_dr_replica_name") + + @pulumi.output_type class GetDatabaseInstanceRestoreBackupContextResult(dict): def __init__(__self__, *, @@ -3672,6 +3754,7 @@ def __init__(__self__, *, region: str, replica_configurations: Sequence['outputs.GetDatabaseInstancesInstanceReplicaConfigurationResult'], replica_names: Sequence[str], + replication_clusters: Sequence['outputs.GetDatabaseInstancesInstanceReplicationClusterResult'], restore_backup_contexts: Sequence['outputs.GetDatabaseInstancesInstanceRestoreBackupContextResult'], root_password: str, self_link: str, @@ -3692,6 +3775,7 @@ def __init__(__self__, *, :param str region: To filter out the Cloud SQL instances which are located in the specified region. :param Sequence['GetDatabaseInstancesInstanceReplicaConfigurationArgs'] replica_configurations: The configuration for replication. :param Sequence[str] replica_names: The replicas of the instance. + :param Sequence['GetDatabaseInstancesInstanceReplicationClusterArgs'] replication_clusters: A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. :param str root_password: Initial root password. Required for MS SQL Server. :param str self_link: The URI of the created resource. :param str service_account_email_address: The service account email address assigned to the instance. @@ -3717,6 +3801,7 @@ def __init__(__self__, *, pulumi.set(__self__, "region", region) pulumi.set(__self__, "replica_configurations", replica_configurations) pulumi.set(__self__, "replica_names", replica_names) + pulumi.set(__self__, "replication_clusters", replication_clusters) pulumi.set(__self__, "restore_backup_contexts", restore_backup_contexts) pulumi.set(__self__, "root_password", root_password) pulumi.set(__self__, "self_link", self_link) @@ -3863,6 +3948,14 @@ def replica_names(self) -> Sequence[str]: """ return pulumi.get(self, "replica_names") + @property + @pulumi.getter(name="replicationClusters") + def replication_clusters(self) -> Sequence['outputs.GetDatabaseInstancesInstanceReplicationClusterResult']: + """ + A primary instance and disaster recovery replica pair. Applicable to MySQL and PostgreSQL. This field can be set only after both the primary and replica are created. + """ + return pulumi.get(self, "replication_clusters") + @property @pulumi.getter(name="restoreBackupContexts") def restore_backup_contexts(self) -> Sequence['outputs.GetDatabaseInstancesInstanceRestoreBackupContextResult']: @@ -4133,6 +4226,35 @@ def verify_server_certificate(self) -> bool: return pulumi.get(self, "verify_server_certificate") +@pulumi.output_type +class GetDatabaseInstancesInstanceReplicationClusterResult(dict): + def __init__(__self__, *, + dr_replica: bool, + failover_dr_replica_name: str): + """ + :param bool dr_replica: Read-only field that indicates whether the replica is a DR replica. + :param str failover_dr_replica_name: If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + pulumi.set(__self__, "dr_replica", dr_replica) + pulumi.set(__self__, "failover_dr_replica_name", failover_dr_replica_name) + + @property + @pulumi.getter(name="drReplica") + def dr_replica(self) -> bool: + """ + Read-only field that indicates whether the replica is a DR replica. + """ + return pulumi.get(self, "dr_replica") + + @property + @pulumi.getter(name="failoverDrReplicaName") + def failover_dr_replica_name(self) -> str: + """ + If the instance is a primary instance, then this field identifies the disaster recovery (DR) replica. The standard format of this field is "your-project:your-instance". You can also set this field to "your-instance", but cloud SQL backend will convert it to the aforementioned standard format. + """ + return pulumi.get(self, "failover_dr_replica_name") + + @pulumi.output_type class GetDatabaseInstancesInstanceRestoreBackupContextResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/sql/source_representation_instance.py b/sdk/python/pulumi_gcp/sql/source_representation_instance.py index 22a738528d..dfcf0c8795 100644 --- a/sdk/python/pulumi_gcp/sql/source_representation_instance.py +++ b/sdk/python/pulumi_gcp/sql/source_representation_instance.py @@ -33,8 +33,7 @@ def __init__(__self__, *, username: Optional[pulumi.Input[str]] = None): """ The set of arguments for constructing a SourceRepresentationInstance resource. - :param pulumi.Input[str] database_version: The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. :param pulumi.Input[str] host: The IPv4 address and port for the external server, or the the DNS address for the external server. If the external server is hosted on Cloud SQL, the port is 5432. @@ -81,8 +80,7 @@ def __init__(__self__, *, @pulumi.getter(name="databaseVersion") def database_version(self) -> pulumi.Input[str]: """ - The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. """ return pulumi.get(self, "database_version") @@ -250,8 +248,7 @@ def __init__(__self__, *, :param pulumi.Input[str] ca_certificate: The CA certificate on the external server. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_certificate: The client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_key: The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. - :param pulumi.Input[str] database_version: The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. :param pulumi.Input[str] dump_file_path: A file in the bucket that contains the data from the external server. :param pulumi.Input[str] host: The IPv4 address and port for the external server, or the the DNS address for the external server. If the external server is hosted on Cloud SQL, the port is 5432. @@ -333,8 +330,7 @@ def client_key(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="databaseVersion") def database_version(self) -> Optional[pulumi.Input[str]]: """ - The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. """ return pulumi.get(self, "database_version") @@ -535,8 +531,7 @@ def __init__(__self__, :param pulumi.Input[str] ca_certificate: The CA certificate on the external server. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_certificate: The client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_key: The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. - :param pulumi.Input[str] database_version: The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. :param pulumi.Input[str] dump_file_path: A file in the bucket that contains the data from the external server. :param pulumi.Input[str] host: The IPv4 address and port for the external server, or the the DNS address for the external server. If the external server is hosted on Cloud SQL, the port is 5432. @@ -711,8 +706,7 @@ def get(resource_name: str, :param pulumi.Input[str] ca_certificate: The CA certificate on the external server. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_certificate: The client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. :param pulumi.Input[str] client_key: The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server. - :param pulumi.Input[str] database_version: The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. :param pulumi.Input[str] dump_file_path: A file in the bucket that contains the data from the external server. :param pulumi.Input[str] host: The IPv4 address and port for the external server, or the the DNS address for the external server. If the external server is hosted on Cloud SQL, the port is 5432. @@ -775,8 +769,7 @@ def client_key(self) -> pulumi.Output[Optional[str]]: @pulumi.getter(name="databaseVersion") def database_version(self) -> pulumi.Output[str]: """ - The MySQL version running on your source database server. - Possible values are: `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`, `POSTGRES_10`, `POSTGRES_11`, `POSTGRES_12`, `POSTGRES_13`, `POSTGRES_14`. + The MySQL, PostgreSQL or SQL Server (beta) version to use. Supported values include MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4, POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16, POSTGRES_17. Database Version Policies includes an up-to-date reference of supported versions. """ return pulumi.get(self, "database_version") diff --git a/sdk/python/pulumi_gcp/vertex/ai_endpoint.py b/sdk/python/pulumi_gcp/vertex/ai_endpoint.py index 9f23718a3e..ec4aca8388 100644 --- a/sdk/python/pulumi_gcp/vertex/ai_endpoint.py +++ b/sdk/python/pulumi_gcp/vertex/ai_endpoint.py @@ -730,7 +730,7 @@ def __init__(__self__, project = gcp.organizations.get_project() endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_89313", + name="endpoint-name_60646", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -751,7 +751,7 @@ def __init__(__self__, import pulumi_gcp as gcp endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_60646", + name="endpoint-name_9394", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -896,7 +896,7 @@ def __init__(__self__, project = gcp.organizations.get_project() endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_89313", + name="endpoint-name_60646", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -917,7 +917,7 @@ def __init__(__self__, import pulumi_gcp as gcp endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_60646", + name="endpoint-name_9394", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", diff --git a/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py b/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py index ab5b057d5a..27f3a1c510 100644 --- a/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py +++ b/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py @@ -618,8 +618,8 @@ def __init__(__self__, test_project = gcp.organizations.get_project() project = gcp.organizations.Project("project", - project_id="tf-test_9394", - name="tf-test_11380", + project_id="tf-test_11380", + name="tf-test_35305", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -1063,8 +1063,8 @@ def __init__(__self__, test_project = gcp.organizations.get_project() project = gcp.organizations.Project("project", - project_id="tf-test_9394", - name="tf-test_11380", + project_id="tf-test_11380", + name="tf-test_35305", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") diff --git a/upstream b/upstream index 9ea7b0adf3..9e94233069 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 9ea7b0adf3c63370005aef1d6ed92d0baaf429e5 +Subproject commit 9e94233069e2f5f4e44f637332955e78162925c8